# translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla (INDIA) # translation of bn_IN.po to Bangla # Translation of initscripts.po to bangla # This file is distributed under the same license as the Initscripts package. # Copyright (C) 2004 Red Hat Inc. # Runa Bhattacharjee , 2004, 2005. # msgid "" msgstr "" "Project-Id-Version: bn_IN\n" "PO-Revision-Date: 2005-04-25 17:46+0530\n" "Last-Translator: Runa Bhattacharjee \n" "Language-Team: Bangla (INDIA) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.9.1\n" "Plural-Forms: Plural-Forms: nplurals=2; plural=(n != 1);\n" "\n" "\n" "\n" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1389 msgid "No parameters given to setup a default route" msgstr "ডিফল্ট route নির্ধারণ করার জন্য কোনো পরামিতি উল্লেখ করা হয়নি" #: /etc/rc.d/init.d/dhcpd:110 msgid "Usage: $0 {start|stop|restart|condrestart|configtest|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|condrestart|configtest|status}" #: /etc/rc.d/init.d/ups:52 msgid "Starting UPS monitor (slave): " msgstr "UPS পর্যবেক্ষক (স্লেভ) আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/crond:66 msgid "Reloading cron daemon configuration: " msgstr "cron ডেমন কনফিগারেশন পুনরায় লোড করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ipv6:227 msgid "" "Warning: configured MTU '$IPV6TO4_MTU' for 6to4 exceeds maximum limit of " "'$tunnelmtu', ignored" msgstr "" "সতর্কবার্তা: 6to4-র জন্য কনফিগার করা MTU '$IPV6TO4_MTU' '$tunnelmtu'-র সর্বোচ্চ " "সীমা অতিক্রম করে, উপেক্ষা করা হচ্ছে" #: /etc/rc.d/init.d/ypxfrd:31 msgid "Stopping YP map server: " msgstr "YP map সার্ভার বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup:84 msgid "Could not set 802.1Q VLAN parameters." msgstr "802.1Q VLAN-র পরামিতি নির্ধারণ করা সম্ভব হয়নি।" #: /etc/sysconfig/network-scripts/ifup:94 #: /etc/sysconfig/network-scripts/ifup-eth:83 msgid "$alias device ${DEVICE} does not seem to be present, delaying initialization." msgstr "$alias ডিভাইস ${DEVICE} সম্ভবত উপস্থিত নেই, কিছু বিলম্বে আরম্ভ করা হবে।" #: /etc/rc.d/init.d/amd:96 /etc/rc.d/init.d/autofs:559 #: /etc/rc.d/init.d/bgpd:59 /etc/rc.d/init.d/gkrellmd:54 #: /etc/rc.d/init.d/irda:72 /etc/rc.d/init.d/ospfd:60 /etc/rc.d/init.d/ripd:59 #: /etc/rc.d/init.d/ripngd:59 /etc/rc.d/init.d/sshd:168 #: /etc/rc.d/init.d/zebra:60 msgid "Usage: $0 {start|stop|restart|reload|condrestart|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|reload|condrestart|status}" #: /etc/rc.d/init.d/autofs:546 msgid "Start $x" msgstr "$x আরম্ভ করো" #: /etc/rc.d/init.d/gpm:22 msgid "Starting console mouse services: " msgstr "কনসোল মাউস পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/rdisc:42 msgid "Shutting down router discovery services: " msgstr "রাউটার অনুসন্ধান পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/rhnsd:38 msgid "Starting Red Hat Network Daemon: " msgstr "Red Hat Network Daemon আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/dictd:28 msgid "no dictionaries installed" msgstr "কোনো অভিধান ইনস্টল করা হয়নি" #: /etc/rc.d/init.d/ups:72 msgid "Shutting down $MODEL: " msgstr "$MODEL বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ppp:142 msgid "pppd started for ${DEVNAME} on ${MODEMPORT} at ${LINESPEED}" msgstr "${MODEMPORT}-র উপর ${LINESPEED}-এ ${DEVNAME}-র জন্য pppd আরম্ভ করা হয়েছে" #: /etc/rc.d/init.d/ypbind:70 msgid "Shutting down NIS services: " msgstr "NIS পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:313 #: /etc/sysconfig/network-scripts/network-functions-ipv6:368 msgid "Missing parameter 'IPv6-gateway' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'IPv6-gateway' (arg 2)" #: /etc/rc.d/init.d/netfs:114 msgid "Unmounting CIFS filesystems: " msgstr "CIFS ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/functions:235 msgid "Usage: pidfileofproc {program}" msgstr "ব্যবহারপদ্ধতি: pidfileofproc {program}" #: /etc/rc.d/init.d/vncserver:43 msgid "vncserver start" msgstr "vncserver আরম্ভ" #: /etc/rc.d/init.d/gdm-early-login:29 msgid "Shutting down display manager: " msgstr "ডিসপ্লে ম্যানেজার বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/crond:93 /etc/rc.d/init.d/krb5kdc:80 #: /etc/rc.d/init.d/saslauthd:75 /etc/rc.d/init.d/squid:160 msgid "Usage: $0 {start|stop|status|reload|restart|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|reload|restart|condrestart}" #: /etc/rc.d/init.d/rpcsvcgssd:44 msgid "Starting RPC svcgssd: " msgstr "RPC svcgssd আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/amd:30 /etc/rc.d/init.d/anacron:15 #: /etc/rc.d/init.d/arpwatch:28 /etc/rc.d/init.d/atd:29 #: /etc/rc.d/init.d/auditd:42 /etc/rc.d/init.d/autofs:472 #: /etc/rc.d/init.d/bgpd:29 /etc/rc.d/init.d/bootparamd:29 #: /etc/rc.d/init.d/canna:28 /etc/rc.d/init.d/cpuspeed:29 #: /etc/rc.d/init.d/crond:25 /etc/rc.d/init.d/cups:57 #: /etc/rc.d/init.d/dc_client:33 /etc/rc.d/init.d/dc_server:29 #: /etc/rc.d/init.d/dhcp6r:32 /etc/rc.d/init.d/dhcp6s:36 #: /etc/rc.d/init.d/dhcpd:44 /etc/rc.d/init.d/dhcrelay:33 #: /etc/rc.d/init.d/dictd:23 /etc/rc.d/init.d/dovecot:19 #: /etc/rc.d/init.d/gkrellmd:24 /etc/rc.d/init.d/httpd:60 #: /etc/rc.d/init.d/ipsec:144 /etc/rc.d/init.d/irda:23 #: /etc/rc.d/init.d/irqbalance:46 /etc/rc.d/init.d/kadmin:44 #: /etc/rc.d/init.d/kprop:30 /etc/rc.d/init.d/krb524:34 #: /etc/rc.d/init.d/krb5kdc:34 /etc/rc.d/init.d/ldap:121 #: /etc/rc.d/init.d/ldap:133 /etc/rc.d/init.d/lisa:35 #: /etc/rc.d/init.d/lm_sensors:57 /etc/rc.d/init.d/mailman:77 #: /etc/rc.d/init.d/mdmonitor:37 /etc/rc.d/init.d/mdmpd:38 #: /etc/rc.d/init.d/mysqld:88 /etc/rc.d/init.d/mysqld:90 #: /etc/rc.d/init.d/mysqld:93 /etc/rc.d/init.d/named:36 #: /etc/rc.d/init.d/nscd:49 /etc/rc.d/init.d/ntpd:97 #: /etc/rc.d/init.d/ospf6d:29 /etc/rc.d/init.d/ospfd:30 #: /etc/rc.d/init.d/portmap:47 /etc/rc.d/init.d/radvd:38 #: /etc/rc.d/init.d/rarpd:22 /etc/rc.d/init.d/ripd:29 #: /etc/rc.d/init.d/ripngd:29 /etc/rc.d/init.d/rwalld:24 #: /etc/rc.d/init.d/saslauthd:36 /etc/rc.d/init.d/sendmail:40 #: /etc/rc.d/init.d/smartd:44 /etc/rc.d/init.d/snmpd:20 #: /etc/rc.d/init.d/snmptrapd:23 /etc/rc.d/init.d/squid:60 #: /etc/rc.d/init.d/sshd:106 /etc/rc.d/init.d/ups:43 #: /etc/rc.d/init.d/vncserver:23 /etc/rc.d/init.d/xfs:63 #: /etc/rc.d/init.d/xinetd:44 /etc/rc.d/init.d/zebra:27 msgid "Starting $prog: " msgstr "$prog আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-sit:64 msgid "Missing remote IPv4 address of tunnel, configuration is not valid" msgstr "টানেলের দূরবর্তী IPv4 ঠিকানা অনুপস্থিত, কনফিগারেশন বৈধ নয়" #: /etc/rc.d/init.d/mDNSResponder:36 msgid "Shutting down mDNSResponder services: " msgstr "mDNSResponder পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifdown-eth:44 #: /etc/sysconfig/network-scripts/ifup-eth:45 msgid "Device ${DEVICE} has different MAC address than expected, ignoring." msgstr "${DEVICE} ডিভাইসে একটি অপ্রত্যাশিত MAC ঠিকানা পাওয়া গিয়েছে, উপেক্ষা করা হচ্ছে।" #: /etc/rc.d/init.d/diskdump:139 msgid "$dev is not a dump device" msgstr "$dev কোনো ডাম্প ডিভাইস নয়" #: /etc/rc.d/init.d/messagebus:34 msgid "Stopping system message bus: " msgstr "সিস্টেম মেসেজ বাস বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/privoxy:268 msgid "Usage: $PRIVOXY_PRG {start|stop|reload|restart|condrestart|status|top}" msgstr "ব্যবহারপদ্ধতি: $PRIVOXY_PRG {start|stop|reload|restart|condrestart|status|top}" #: /etc/rc.d/init.d/yum:29 msgid "Disabling nightly yum update: " msgstr "রাত্রিকালীন yum আপডেট প্রক্রিয়া নিষ্ক্রিয় করা হচ্ছে: " #: /etc/rc.d/init.d/arptables_jf:171 /etc/rc.d/init.d/ip6tables:315 #: /etc/rc.d/init.d/iptables:315 msgid "Usage: $0 {start|stop|restart|condrestart|status|panic|save}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|condrestart|status|panic|save}" #: /etc/rc.d/init.d/autofs:327 msgid "" "Active Mount Points:\n" "--------------------" msgstr "" "সক্রিয় মাউন্ট-পয়েন্ট:\n" "--------------------" #: /etc/rc.d/init.d/firstboot:47 msgid "X is not configured. Running system-config-display" msgstr "X কনফিগার করা হয়নি। system-config-display চালানো হচ্ছে" #: /etc/rc.d/init.d/ups:34 msgid "Starting $MODEL: " msgstr "$MODEL আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-eth:99 msgid "Enslaving ${DEVICE} to ${MASTER}" msgstr "${DEVICE}-কে ${MASTER}-র সাথে স্লেভ হিসাবে যুক্ত করা হচ্ছে" #: /etc/rc.d/init.d/yum:60 msgid "Nightly yum update is disabled." msgstr "রাত্রিকালীন yum আপডেট প্রক্রিয়া নিষ্ক্রিয় করা আছে।" #: /etc/rc.d/init.d/rwhod:32 msgid "Stopping rwho services: " msgstr "rwho পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/atalk:53 msgid "Shutting down AppleTalk services: " msgstr "AppleTalk পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/rc:91 msgid "Starting $subsys: " msgstr "$subsys আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/arptables_jf:49 msgid "Flushing all current rules and user defined chains:" msgstr "সমস্ত বিদ্যমান নিয়ম এবং ব্যবহারকারীর দ্বারা নির্ধারিত চেইন পরিশ্রুত করা হচ্ছে:" #: /etc/rc.d/init.d/crond:28 msgid "cannot start crond: crond is already running." msgstr "crond আরম্ভ করা যায়নি: crond বর্তমানে চলছে।" #: /etc/rc.d/init.d/isicom:27 msgid "Failed to load firmware." msgstr "ফার্মওয়্যার লোড করতে ব্যর্থ" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1326 msgid "Given IPv6 default gateway '$address' is not in proper format" msgstr "প্রদত্ত ডিফল্ট গেটওয়ে IPv6 '$address', সঠিক ফর্মায় নেই" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1449 msgid "Unsupported reason '$reason' for sending trigger to radvd" msgstr "radvd-তে ট্রিগার প্রেরণ করার অসমর্থিত কারণ '$reason'" #: /etc/rc.d/rc.sysinit:99 msgid "\t\tWelcome to " msgstr "\t\tস্বাগতম " #: /etc/rc.d/init.d/rstatd:31 msgid "Stopping rstat services: " msgstr "rstat পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/cups-config-daemon:67 /etc/rc.d/init.d/haldaemon:71 #: /etc/rc.d/init.d/innd:112 /etc/rc.d/init.d/kprop:67 #: /etc/rc.d/init.d/krb524:70 /etc/rc.d/init.d/lm_sensors:133 #: /etc/rc.d/init.d/mDNSResponder:69 /etc/rc.d/init.d/NetworkManager:76 #: /etc/rc.d/init.d/nifd:70 /etc/rc.d/init.d/syslog:80 #: /etc/rc.d/init.d/ypbind:109 msgid "Usage: $0 {start|stop|status|restart|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|condrestart}" #: /etc/rc.d/init.d/halt:43 msgid "$0: call me as 'halt' or 'reboot' please!" msgstr "$0: অনুগ্রহ করে আমার জন্য 'halt' অথবা 'reboot' পরিচয় ব্যবহার করুন!" #: /etc/rc.d/init.d/isdn:252 msgid "$NAME is attached to $DEVICE" msgstr "$NAME-টি $DEVICE-র সাথে যুক্ত" #: /etc/rc.d/init.d/bgpd:36 /etc/rc.d/init.d/dhcp6r:42 #: /etc/rc.d/init.d/dhcp6s:46 /etc/rc.d/init.d/dhcpd:63 #: /etc/rc.d/init.d/dhcrelay:45 /etc/rc.d/init.d/dictd:43 #: /etc/rc.d/init.d/gkrellmd:31 /etc/rc.d/init.d/ipsec:150 #: /etc/rc.d/init.d/irda:34 /etc/rc.d/init.d/mailman:91 #: /etc/rc.d/init.d/ntpd:106 /etc/rc.d/init.d/ospf6d:36 #: /etc/rc.d/init.d/ospfd:37 /etc/rc.d/init.d/ripd:36 #: /etc/rc.d/init.d/ripngd:36 /etc/rc.d/init.d/sendmail:104 #: /etc/rc.d/init.d/smartd:51 /etc/rc.d/init.d/vncserver:49 #: /etc/rc.d/init.d/vsftpd:49 /etc/rc.d/init.d/xfs:82 #: /etc/rc.d/init.d/zebra:37 msgid "Shutting down $prog: " msgstr "$prog বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/halt:184 msgid "Unmounting file systems (retry): " msgstr "ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে (পুনরায় চেষ্টা করুন): " #: /etc/rc.d/init.d/NetworkManager:42 msgid "Stopping NetworkManager daemon: " msgstr "NetworkManager ডেমন বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/atalk:91 /etc/rc.d/init.d/isdn:281 #: /etc/rc.d/init.d/ldap:191 msgid "Usage: $0 {start|stop|restart|status|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|status|condrestart}" #: /etc/sysconfig/network-scripts/network-functions-ipv6:124 msgid "INFO " msgstr "তথ্য " #: /etc/rc.d/init.d/netfs:80 msgid "Unmounting network block filesystems (retry): " msgstr "নেটওয়ার্ক ব্লক ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে (পুনরায় চেষ্টা করুন): " #: /etc/rc.d/init.d/halt:59 msgid "Sending all processes the TERM signal..." msgstr "সকল প্রসেসকে TERM সিগন্যাল প্রেরণ করা হচ্ছে..." #: /etc/rc.d/init.d/crond:44 /etc/rc.d/init.d/crond:45 msgid "cannot stop crond: crond is not running." msgstr "crond বন্ধ করা যায়নি: crond বন্ধ করা যায়নি।" #: /etc/sysconfig/network-scripts/ifup-aliases:160 msgid "error in $FILE: didn't specify device or ipaddr" msgstr "$FILE ফাইলে ত্রুটি: ডিভাইস অথবা ipaddr উল্লেখ করা হয়নি" #: /etc/rc.d/init.d/nfs:102 msgid "Shutting down NFS daemon: " msgstr "NFS ডেমন বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:115 msgid "Unmounting NCP filesystems: " msgstr "NCP ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/postfix:62 msgid "Shutting down postfix: " msgstr "postfix বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/innd:76 msgid "Reloading INN Service: " msgstr "INN পরিসেবা পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/init.d/arptables_jf:85 msgid "Flushing all chains:" msgstr "সমস্ত চেইন পরিশ্রুত করা হচ্ছে:" #: /etc/rc.d/init.d/mysqld:61 msgid "Initializing MySQL database: " msgstr "MySQL ডাটাবেস আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-sl:35 msgid "/usr/sbin/dip does not exist or is not executable for $DEVICE" msgstr "/usr/sbin/dip বর্তমানে উপস্থিত নেই অথবা $DEVICE-র জন্য কার্যকরী নয়" #: /etc/rc.d/init.d/smb:121 /etc/rc.d/init.d/winbind:96 msgid "Usage: $0 {start|stop|restart|reload|status|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|reload|status|condrestart}" #: /etc/rc.d/init.d/halt:144 /etc/rc.d/init.d/netfs:62 msgid "Detaching loopback device $dev: " msgstr "লুপব্যাক ডিভাইস $dev বিচ্ছিন্ন করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:82 msgid "Unmounting network block filesystems: " msgstr "নেটওয়ার্ক ব্লক ফাইল-সিস্টেমগুলি আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/ip6tables:217 msgid "Saving firewall rules to $IP6TABLES_DATA: " msgstr "ফায়ারওয়ালের নিয়মনীতি $IP6TABLES_DATA-র মধ্যে সংরক্ষণ করা হচ্ছে: " #: /etc/rc.d/init.d/gdm-allow-login:35 /etc/rc.d/init.d/kudzu:65 msgid "Usage: $0 {start|stop}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop}" #: /etc/rc.d/init.d/gdm-allow-login:17 msgid "Allow users to login from display manager:" msgstr "ব্যবহারকারীদেরকে ডিসপ্লে ম্যানেজারের মাধ্যমে লগ-ইন করার অনুমতি প্রদান করুন:" #: /etc/rc.d/init.d/cups:97 /etc/rc.d/init.d/httpd:76 /etc/rc.d/init.d/lisa:61 #: /etc/rc.d/init.d/named:132 /etc/rc.d/init.d/nscd:103 #: /etc/rc.d/init.d/radvd:61 /etc/rc.d/init.d/snmpd:48 #: /etc/rc.d/init.d/sshd:128 /etc/rc.d/init.d/xfs:96 msgid "Reloading $prog: " msgstr "$prog পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/init.d/psacct:18 msgid "Starting process accounting: " msgstr "প্রসেস অ্যাকাউন্টিং আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/ypxfrd:22 msgid "Starting YP map server: " msgstr "YP map সার্ভার আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/apmd:76 msgid "Usage: apmd {start|stop|status|restart|reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: apmd {start|stop|status|restart|reload|condrestart}" #: /etc/rc.d/rc.sysinit:296 msgid "Loading default keymap ($KEYTABLE): " msgstr "ডিফল্ট কীম্যাপ (keymap) ($KEYTABLE) লোড করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ippp:360 #: /etc/sysconfig/network-scripts/ifup-isdn:360 msgid "" "Warning: ipppd (kernel 2.4.x and below) doesn't support IPv6 using " "encapsulation 'syncppp'" msgstr "" "সতর্কবাণী: ipppd (kernel 2.4.x এবং তার নিম্নবর্তী), 'syncppp' এনক্যাপসুলেশন " "ব্যবহারকারী IPv6 সমর্থন করে না" #: /etc/rc.d/init.d/gpm:33 msgid "(no mouse is configured)" msgstr "(কোনো মাউস কনফিগার করা হয়নি)" #: /etc/rc.d/init.d/xendomains:111 msgid "Shutting down all Xen domains:" msgstr "সমসস্ত Xen ডোমেইন বন্ধ করা হচ্ছে:" #: /etc/sysconfig/network-scripts/ifup-ipv6:102 msgid "" "Global IPv6 forwarding is enabled in configuration, but not currently " "enabled in kernel" msgstr "" "কনফিগারেশনে Global IPv6 অনুবর্তন প্রক্রিয়া সক্রিয় করা আছে, কিন্তু বর্তমানে তা " "কার্ণেলে সক্রিয় করা হয়নি" #: /etc/rc.d/init.d/gdm-early-login:37 msgid "Usage: $0 {start|stop)" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop)" #: /etc/rc.d/init.d/apmd:37 msgid "Shutting down APM daemon: " msgstr "APM ডেমন বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/postfix:84 msgid "postfix flush" msgstr "postfix flush" #: /etc/sysconfig/network-scripts/network-functions-ipv6:560 msgid "Cannot add IPv6 address '$address' on dev '$device'" msgstr "'$device' ডিভাইসে IPv6 অ্যাড্রেস '$address' যোগ করা যায়নি" #: /etc/sysconfig/network-scripts/network-functions-ipv6:877 msgid "Given address '$addr' is not a valid IPv4 one (arg 1)" msgstr "উল্লিখিত ঠিকানা '$addr' বৈধ IPv4 ঠিকানা নয় (arg 1)" #: /etc/rc.d/init.d/postfix:72 msgid "postfix reload" msgstr "postfix reload" #: /etc/rc.d/init.d/netfs:121 msgid "Configured NFS mountpoints: " msgstr "কনফিগার করা NFS মাউন্ট-পয়েন্ট: " #: /etc/rc.d/init.d/hidd:34 msgid "Shutting down hidd: " msgstr "hidd বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/halt:166 msgid "Unmounting pipe file systems: " msgstr "পাইপ ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/rc:37 msgid "Entering interactive startup" msgstr "ইন্টারেক্টিভ স্টার্টআপে প্রবেশ করা হচ্ছে" #: /etc/rc.d/init.d/xfs:134 msgid "Usage: $prog {start|stop|status|restart|reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: $prog {start|stop|status|restart|reload|condrestart}" #: /etc/rc.d/init.d/ups:61 msgid "Stopping UPS monitor: " msgstr "UPS পর্যবেক্ষক বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/microcode_ctl:25 msgid "$0: $DEVICE not a character device?" msgstr "$0: $DEVICE কী কোনো চ্যারেক্টার ডিভাইস নয়?" #: /etc/sysconfig/network-scripts/ifup-aliases:306 msgid "error in $FILE: IPADDR_START and IPADDR_END don't agree" msgstr "$FILE-এ ত্রুটি: IPADDR_START এবং IPADDR_END সমঞ্জসে নেই" #: /etc/rc.d/init.d/functions:214 msgid "$base $killlevel" msgstr "$base $killlevel" #: /etc/sysconfig/network-scripts/ifup-ppp:60 msgid "adsl-start does not exist or is not executable for ${DEVICE}" msgstr "adsl-start উপস্থিত নেই অথবা ${DEVICE} কার্যকরী নয়" #: /etc/rc.d/init.d/isdn:190 msgid "Shutting down $prog" msgstr "$prog-টি বন্ধ করা হচ্ছে" #: /etc/rc.d/init.d/pcmcia:145 msgid "cardmgr (pid $pid) is running..." msgstr "cardmgr (pid $pid) চলছে..." #: /etc/rc.d/rc:39 msgid "Entering non-interactive startup" msgstr "নন-ইন্টারেক্টিভ স্টার্টআপে প্রবেশ" #: /etc/sysconfig/network-scripts/ifup-ipv6:119 msgid "" "Global IPv6 forwarding is disabled in configuration, but not currently " "disabled in kernel" msgstr "" "কনফিগারেশনে Global IPv6 অনুবর্তন প্রক্রিয়া নিষ্ক্রিয় করা আছে, কিন্তু বর্তমানে তা " "কার্ণেলে নিষ্ক্রিয় করা হয়নি" #: /etc/rc.d/init.d/iptables:217 msgid "Saving firewall rules to $IPTABLES_DATA: " msgstr "$IPTABLES_DATA-এ ফায়ারওয়ালের নিয়ম সংরক্ষণ করা হচ্ছে: " #: /etc/rc.d/init.d/rpcgssd:99 /etc/rc.d/init.d/rpcidmapd:85 #: /etc/rc.d/init.d/rpcsvcgssd:98 msgid "Usage: $0 {start|stop|restart|condstart|condrestart|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|condstart|condrestart|status}" #: /etc/sysconfig/network-scripts/network-functions-ipv6:286 msgid "" "IPv6 forwarding per device cannot be controlled via sysctl - use netfilter6 " "instead" msgstr "" "প্রতি ডিভাইসে IPv6 অনুবর্তন প্রক্রিয়া sysctl-র মাধ্যমে নিয়ন্ত্রণরা সম্ভব নয়- " "তাএরপরিবর্তে netfilter6 ব্যবহার করুন" #: /etc/rc.d/init.d/innd:59 msgid "Stopping INNFeed service: " msgstr "INNFeed পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/httpd:79 msgid "not reloading due to configuration syntax error" msgstr "কনফিগারেশনের মধ্যে সিন্টেক্স সংক্রান্ত সমস্যার দরুন পুনরায় লোড করা হবে না" #: /etc/rc.d/init.d/mdmpd:44 /etc/rc.d/init.d/mdmpd:49 msgid "mdmpd" msgstr "mdmpd" #: /etc/rc.d/init.d/postfix:129 msgid "" "Usage: postfix {start|stop|restart|reload|abort|flush|check|status|" "condrestart}" msgstr "" "ব্যবহারপদ্ধতি: postfix {start|stop|restart|reload|abort|flush|check|status|" "condrestart}" #: /etc/rc.d/init.d/network:267 msgid "Shutting down loopback interface: " msgstr "লুকব্যাক ইন্টারফেস বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/dovecot:60 msgid "Usage: $0 {condrestart|start|stop|restart|reload|status}" msgstr "ব্যবহারপদ্ধতি: $0 {condrestart|start|stop|restart|reload|status}" #: /etc/rc.d/init.d/syslog:37 msgid "Starting kernel logger: " msgstr "kernel logger আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/yppasswdd:49 msgid "Stopping YP passwd service: " msgstr "YP passwd পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:454 msgid "Checking local filesystem quotas: " msgstr "স্থানীয় ফাইল-সিস্টেমের quota পরীক্ষা করা হচ্ছে: " #: /etc/rc.d/init.d/single:44 msgid "Telling INIT to go to single user mode." msgstr "INIT-কে single user মোডে পরিবর্তন করার আদেশ দেওয়া হচ্ছে।" #: /etc/rc.d/init.d/pcmcia:81 msgid "Starting PCMCIA services: " msgstr "PCMCIA পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/halt:214 msgid "$message" msgstr "$message" #: /etc/rc.d/init.d/postfix:40 msgid "determination of alias_database" msgstr "alias_database-র মীমাংসা" #: /etc/sysconfig/network-scripts/ifup-eth:178 msgid " done." msgstr " সম্পন্ন।" #: /etc/rc.d/init.d/halt:138 /etc/rc.d/init.d/netfs:56 msgid "Unmounting loopback filesystems (retry):" msgstr "লুপব্যাক ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে (পুনরায় চেষ্টা করুন):" #: /etc/rc.d/init.d/hidd:25 msgid "Starting hidd: " msgstr "hidd আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/named:139 msgid "$prog reload" msgstr "$prog পুনরায় লোড করো" #: /etc/rc.d/init.d/cups-config-daemon:33 msgid "Stopping cups-config-daemon: " msgstr "cups-config-daemon বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/readahead:19 /etc/rc.d/init.d/readahead_early:19 msgid "Starting background readahead: " msgstr "ব্যাকগ্রাউন্ডে readahead আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup:22 #: /etc/sysconfig/network-scripts/ifup:30 msgid "Usage: ifup " msgstr "ব্যবহারপদ্ধতি: ifup " #: /etc/rc.d/init.d/sshd:60 /etc/rc.d/init.d/sshd:63 msgid "RSA key generation" msgstr "RSA কী (key) উত্পাদন" #: /etc/rc.d/init.d/halt:126 msgid "Turning off quotas: " msgstr "quota-র প্রয়োগ বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:1499 msgid "Pidfile '$pidfile' is empty, cannot send trigger to radvd" msgstr "Pidfile '$pidfile' ফাঁকা, radvd-তে ট্রিগার প্রেরণ করা সম্ভব নয়" #: /etc/rc.d/init.d/rpcsvcgssd:76 msgid "Shutting down RPC svcgssd: " msgstr "RPC svcgssd বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:38 msgid "Mounting NFS filesystems: " msgstr "NFS ফাইল-সিস্টেম মাউন্ট করা যায়নি: " #: /etc/rc.d/init.d/NetworkManager:33 msgid "Starting NetworkManager daemon: " msgstr "NetworkManager ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/named:95 msgid "Error in configuration file /etc/named.conf : $named_err" msgstr "কনফিগারেশন ফাইল /etc/named.conf-এ সমস্যা : $named_err" #: /etc/sysconfig/network-scripts/ifup-ipv6:290 msgid "Error occurred while calculating the IPv6to4 prefix" msgstr "IPv6to4 প্রেফিক্স গণনা করতে সমস্যা দেখা দিয়েছে" #: /etc/rc.d/init.d/arptables_jf:165 /etc/rc.d/init.d/arptables_jf:166 msgid "Saving current rules to $ARPTABLES_CONFIG" msgstr "$ARPTABLES_CONFIG-এ বর্তমান নিয়ম সংরক্ষণ করা হচ্ছে" #: /etc/rc.d/init.d/smartd:76 msgid "Usage: $0 {start|stop|reload|report|restart|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|reload|report|restart|status}" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1283 msgid "Given IPv6 MTU '$ipv6_mtu' is out of range" msgstr "প্রদত্ত IPv6 MTU '$ipv6_mtu' নির্ধারিত সীমার বাইরে" #: /etc/rc.d/init.d/nfs:160 msgid "Usage: nfs {start|stop|status|restart|reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: nfs {start|stop|status|restart|reload|condrestart}" #: /etc/sysconfig/network-scripts/ifup-aliases:67 msgid "usage: ifup-aliases []\n" msgstr "ব্যবহারপদ্ধতি: ifup-aliases []\n" #: /etc/rc.d/rc.sysinit:301 msgid "Loading default keymap" msgstr "ডিফল্ট কীম্যাপ লোড করা হচ্ছে" #: /etc/sysconfig/network-scripts/network-functions-ipv6:147 msgid "ERROR: [ipv6_log] Cannot log to channel '$channel'" msgstr "ত্রুটি: [ipv6_log] '$channel' চ্যানেলে লগ করা যায়নি" #: /etc/rc.d/init.d/network:66 msgid "Bringing up loopback interface: " msgstr "লুপব্যাক ইন্টারফেস আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/kadmin:58 /etc/rc.d/init.d/krb5kdc:48 msgid "Reopening $prog log file: " msgstr "$prog লগ ফাইলটি পুনরায় খোলা হচ্ছে: " #: /etc/rc.d/init.d/functions:207 /etc/rc.d/init.d/functions:218 msgid "$base shutdown" msgstr "$base বন্ধ করা হয়েছে" #: /etc/rc.d/init.d/smb:77 /etc/rc.d/init.d/winbind:65 msgid "Reloading smb.conf file: " msgstr "smb.conf ফাইলটি পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/init.d/crond:29 msgid "cannot start crond: crond already running." msgstr "crond আরম্ভ করা যায়নি: crond বর্তমানে চলছে।" #: /etc/rc.d/init.d/psacct:36 msgid "Process accounting is enabled." msgstr "প্রসেস অ্যাকাউন্টিং প্রক্রিয়া সক্রিয় অবস্থায় আছে।" #: /etc/sysconfig/network-scripts/ifup-eth:166 msgid "Determining IP information for ${DEVICE}..." msgstr "${DEVICE}-র IP তথ্য মীমাংসা করা হচ্ছে..." #: /etc/rc.d/init.d/postgresql:208 msgid "Stopping ${NAME} service: " msgstr "${NAME} পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/postfix:79 msgid "postfix abort" msgstr "postfix abort" #: /etc/rc.d/init.d/functions:152 /etc/rc.d/init.d/mDNSResponder:29 msgid "$base startup" msgstr "$base স্টার্টআপ" #: /etc/sysconfig/network-scripts/ifup-ipv6:293 msgid "radvd control enabled, but config is not complete" msgstr "radvd নিয়ন্ত্রণ ব্যবস্থা সক্রিয় করা আছে, কিন্তু config সম্পূর্ণ নয়" #: /etc/sysconfig/network-scripts/network-functions-ipv6:862 msgid "Missing parameter 'address' (arg 1)" msgstr "অনুপস্থিত পরামিতি 'address' (arg 1)" #: /etc/rc.d/init.d/isdn:246 msgid "$0: Link is down" msgstr "$0: লিঙ্কটি নিষ্ক্রিয় রয়েছে" #: /etc/rc.d/init.d/psacct:38 msgid "Process accounting is disabled." msgstr "প্রসেস অ্যাকাউন্টিং প্রক্রিয়া নিষ্ক্রিয় অবস্থায় আছে।" #: /etc/rc.d/init.d/auditd:79 /etc/rc.d/init.d/xinetd:78 msgid "Reloading configuration: " msgstr "কনফিগারেশন পুনরায় লোড করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:115 msgid "ERROR " msgstr "ত্রুটি " #: /etc/rc.d/init.d/innd:26 msgid "Please run makehistory and/or makedbz before starting innd." msgstr "innd আরম্ভ করার পূর্বে, অনুগ্রহ করে makehistory এবং/অথবা makedbz ব্যবহার করুন।" #: /etc/rc.d/init.d/ip6tables:172 msgid "Loading additional $IP6TABLES modules: " msgstr "অতিরিক্ত $IP6TABLES মডিউল লোড করা হচ্ছে: " #: /etc/rc.d/init.d/mDNSResponder:24 msgid "Starting mDNSResponder... " msgstr "mDNSResponder আরম্ভ করা হচ্ছে... " #: /etc/rc.d/init.d/netfs:149 msgid "Active NCP mountpoints: " msgstr "সক্রিয় NCP মাউন্ট-পয়েন্ট: " #: /etc/rc.d/init.d/rpcgssd:77 msgid "Shutting down RPC gssd: " msgstr "RPC gssd বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/sshd:119 msgid "Stopping $prog" msgstr "$prog বন্ধ করা হচ্ছে" #: /etc/rc.d/init.d/bootparamd:69 /etc/rc.d/init.d/pcmcia:55 #: /etc/rc.d/init.d/psacct:48 msgid "Usage: $0 {start|stop|status|restart|reload}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|reload}" #: /etc/rc.d/init.d/functions:441 msgid "yY" msgstr "yY" #: /etc/sysconfig/network-scripts/ifup-aliases:226 #: /etc/sysconfig/network-scripts/ifup-aliases:236 msgid "error in ifcfg-${parent_device}: files" msgstr "ifcfg-${parent_device} ফাইলে সমস্যা: ফাইল" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1007 msgid "Missing parameter 'local IPv4 address' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'local IPv4 address' (arg 2)" #: /etc/rc.d/init.d/nfs:106 msgid "Shutting down NFS quotas: " msgstr "NFS -র quota বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/functions:90 /etc/rc.d/init.d/functions:118 msgid "$0: Usage: daemon [+/-nicelevel] {program}" msgstr "$0: ব্যবহারপদ্ধতি: daemon [+/-nicelevel] {program}" #: /etc/rc.d/init.d/functions:307 msgid "${base} dead but subsys locked" msgstr "${base} সমাপ্ত কিন্তু subsys লক করা রয়েছে" #: /etc/rc.d/init.d/named:33 msgid "$prog: already running" msgstr "$prog: বর্তমানে চলছে" #: /etc/rc.d/init.d/rstatd:21 msgid "Starting rstat services: " msgstr "rstat পরিসেবা চলছে: " #: /etc/rc.d/init.d/netfs:129 msgid "Configured CIFS mountpoints: " msgstr "CIFS মাউন্ট-পয়েন্ট কনফিগার করা হয়েছে: " #: /etc/sysconfig/network-scripts/ifup:109 #: /etc/sysconfig/network-scripts/ifup:110 msgid "ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}" msgstr "ত্রুটি: ${DEVICE} হিসাবে vlan ${VID}, dev ${PHYSDEV}-র উপর যোগ করা যায়নি" #: /etc/rc.d/init.d/vncserver:42 msgid "vncserver startup" msgstr "vncserver স্টার্টআপ" #: /etc/sysconfig/network-scripts/init.ipv6-global:181 msgid "Usage: $0 {start|stop|reload|restart|showsysctl}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|reload|restart|showsysctl}" #: /etc/rc.d/init.d/network:272 msgid "Disabling IPv4 packet forwarding: " msgstr "IPv4 প্যাকেট অনুবর্তন প্রক্রিয়া নিষ্ক্রিয় করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ppp:47 msgid "ifup-ppp for ${DEVICE} exiting" msgstr "${DEVICE}-র ifup-ppp প্রস্থান করছে" #: /etc/rc.d/init.d/haldaemon:35 msgid "Stopping HAL daemon: " msgstr "HAL ডেমন বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/network:84 msgid "No 802.1Q VLAN support available in kernel." msgstr "802.1Q VLAN-কে কার্ণেল সমর্থন করে না।" #: /etc/rc.d/init.d/rpcgssd:46 msgid "Starting RPC gssd: " msgstr "RPC gssd আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/nfs:149 msgid "reload" msgstr "পুনরায় লোড করো" #: /etc/rc.d/rc.sysinit:337 msgid "Setting up Logical Volume Management:" msgstr "লজিক্যাল ভলিউম ম্যানেজমেন্ট স্থাপন করা হচ্ছে:" #: /etc/rc.d/rc.sysinit:143 msgid "Initializing hardware... " msgstr "হার্ডওয়্যার আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:141 msgid "Active SMB mountpoints: " msgstr "সক্রিয় SMB মাউন্ট-পয়েন্ট: " #: /etc/rc.d/init.d/kadmin:39 msgid "Extracting kadm5 Service Keys: " msgstr "kadm5 সার্ভিস কী (key) উদ্ধার করা হচ্ছে: " #: /etc/rc.d/init.d/privoxy:206 msgid "Starting $PRIVOXY_PRG: " msgstr "$PRIVOXY_PRG আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/innd:66 msgid "Stopping INN actived service: " msgstr "INN-র সক্রিয় পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-aliases:156 msgid "error in $FILE: already seen device $parent_device:$DEVNUM in $devseen" msgstr "" "$FILE ফাইলে সমস্যা: $parent_device:$DEVNUM ডিভাইসকে $devseen-এ পূর্বে সনাক্ত করা " "হয়েছে" #: /etc/rc.d/init.d/syslog:44 msgid "Shutting down kernel logger: " msgstr "kernel logger বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/ups:48 msgid "Starting UPS monitor (master): " msgstr "UPS পর্যবেক্ষক (মাস্টার) আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/autofs:535 msgid "Stop $command" msgstr "$command বন্ধ করো" #: /etc/rc.d/init.d/halt:35 msgid "Halting system..." msgstr "সিস্টেমের কর্ম স্থগিত করা হচ্ছে..." #: /etc/sysconfig/network-scripts/ifup:75 msgid "PHYSDEV should be set for device ${DEVICE}" msgstr "${DEVICE}-র জন্য PHYSDEV নির্ধারণ করা আবশ্যক" #: /etc/rc.d/init.d/iptables:158 msgid "Applying $IPTABLES firewall rules: " msgstr "$IPTABLES ফায়ারওয়াল নিয়মনীতি প্রয়োগ করা হচ্ছে: " #: /etc/rc.d/init.d/functions:285 msgid "Usage: status {program}" msgstr "ব্যবহারপদ্ধতি: status {program}" #: /etc/rc.d/init.d/amd:93 msgid "Reloading $prog:" msgstr "$prog পুনরায় লোড করা হচ্ছে:" #: /etc/rc.d/init.d/rhnsd:46 msgid "Stopping Red Hat Network Daemon: " msgstr "Red Hat Network Daemon বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/xendomains:84 msgid "Starting auto Xen domains:" msgstr "অটো Xen ডোমেইন আরম্ভ করা হচ্ছে:" #: /etc/rc.d/init.d/multipathd:44 msgid "Stopping $prog daemon: " msgstr "$prog ডেমন বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ipv6:277 msgid "Using 6to4 and RADVD IPv6 forwarding usually should be enabled, but it isn't" msgstr "" "6to4 এবং RADVD IPv6 অনুবর্তন প্রক্রিয়ায় ব্যবহার সাধারণত সক্রিয় রাখা উচিত, কিন্তু তা " "সক্রিয় অবস্থায় নেই" #: /etc/sysconfig/network-scripts/network-functions-ipv6:267 msgid "Forwarding control parameter isn't valid '$fw_control' (arg 1)" msgstr "অনুবর্তন প্রক্রিয়া নিয়ন্ত্রণ পরামিতি বৈধ নয় '$fw_control' (arg 1)" #: /etc/rc.d/init.d/rusersd:35 msgid "Stopping rusers services: " msgstr "rusers পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/dund:25 msgid "Starting dund: " msgstr "dund আরম্ভ করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:611 msgid "Enabling swap space: " msgstr "swap স্পেস সক্রিয় করা হচ্ছে: " #: /etc/rc.d/init.d/messagebus:26 msgid "Starting system message bus: " msgstr "সিস্টেম মেসেজ বাস আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup:29 msgid "$0: configuration for ${1} not found." msgstr "$0: ${1}-র কনফিগারেশন পাওয়া যায়নি।" #: /etc/rc.d/init.d/privoxy:221 msgid "Stopping $PRIVOXY_PRG: " msgstr "$PRIVOXY_PRG বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:1069 msgid "" "Given remote address '$addressipv4tunnel' on tunnel device '$device' is " "already configured on device '$devnew'" msgstr "" "টানেল ডিভাইস '$device'-র উপর প্রদত্ত দূরবর্তী ঠিকানা '$addressipv4tunnel', " "'$devnew' ডিভাসের উপর পূর্বেই কনফিগার করা হয়েছে" #: /etc/sysconfig/network-scripts/ifup-sl:44 msgid "/etc/sysconfig/network-scripts/dip-$DEVICE does not exist" msgstr "/etc/sysconfig/network-scripts/dip-$DEVICE বর্তমানে উপস্থিত নেই" #: /etc/sysconfig/network-scripts/ifdown-sit:46 #: /etc/sysconfig/network-scripts/ifup-sit:59 msgid "" "Device '$DEVICE' isn't supported here, use IPV6_AUTOTUNNEL setting and " "restart (IPv6) networking" msgstr "" "'$DEVICE' ডিভাইসটি এখানে সমর্থিত নয়, IPV6_AUTOTUNNEL বৈশিষ্ট্য ব্যবহার করে " "(IPv6) নেটওয়ার্কিং পুনরায় চালু করুন" #: /etc/rc.d/init.d/yum:22 msgid "Enabling nightly yum update: " msgstr "রাত্রিকালীন yum আপডেট সক্রিয় করা হচ্ছে: " #: /etc/rc.d/init.d/yum:65 msgid "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|reload|force-reload|condrestart}" #: /etc/rc.d/init.d/postfix:71 msgid "Reloading postfix: " msgstr "postfix পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/init.d/isicom:36 msgid "Disabling PLX devices... " msgstr "PLX ডিভাইস নিষ্ক্রিয় করা হচ্ছে... " #: /etc/rc.d/init.d/vsftpd:37 msgid "$prog $site" msgstr "$prog $site" #: /etc/rc.d/init.d/netplugd:33 msgid "Starting network plug daemon: " msgstr "নেটওয়ার্ক প্লাগ ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/network:295 msgid "Currently active devices:" msgstr "বর্তমানে সক্রিয় ডিভাইস:" #: /etc/rc.d/init.d/NetworkManager:31 msgid "Setting network parameters... " msgstr "নেটওয়ার্ক সংক্রান্ত পরামিতি নির্ধারণ করা হচ্ছে... " #: /etc/rc.d/init.d/isicom:63 msgid "Usage: ${0##*/} {start|stop|status|restart|reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: ${0##*/} {start|stop|status|restart|reload|condrestart}" #: /etc/sysconfig/network-scripts/network-functions-ipv6:822 msgid "Missing parameter 'IPv4 address' (arg 1)" msgstr "অনুপস্থিত পরামিতি 'IPv4 address' (arg 1)" #: /etc/rc.d/init.d/rarpd:65 msgid "Usage: $0 {start|stop|restart|condrestart|reload|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|condrestart|reload|status}" #: /etc/rc.d/init.d/netplugd:59 /etc/rc.d/init.d/rdisc:77 #: /etc/rc.d/init.d/rstatd:63 /etc/rc.d/init.d/rusersd:66 #: /etc/rc.d/init.d/rwalld:64 /etc/rc.d/init.d/rwhod:63 msgid "Usage: $0 {start|stop|status|restart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart}" #: /etc/rc.d/init.d/postfix:63 msgid "postfix stop" msgstr "postfix stop" #: /etc/rc.d/init.d/smartd:63 msgid "Checking SMART devices now: " msgstr "SMART ডিভাইস এখন পরীক্ষা করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ippp:55 #: /etc/sysconfig/network-scripts/ifup-isdn:55 msgid "$*" msgstr "$*" #: /etc/rc.d/init.d/dc_client:74 /etc/rc.d/init.d/dc_server:70 msgid "Usage: $prog {start|stop|restart|condrestart|status|help}" msgstr "ব্যবহারপদ্ধতি: $prog {start|stop|restart|condrestart|status|help}" #: /etc/rc.d/init.d/ypbind:44 msgid "Listening for an NIS domain server." msgstr "NIS ডোমেইন সার্ভারের জন্য অপেক্ষা করা হচ্ছে।" #: /etc/rc.d/rc.sysinit:414 msgid "(Repair filesystem)" msgstr "(ফাইল-সিস্টেম সংশোধন করো)" #: /etc/rc.d/init.d/httpd:80 msgid "not reloading $httpd due to configuration syntax error" msgstr "কনফিগারেশনের মধ্যে সিন্টেক্স সংক্রান্ত সমস্যার দরুন $httpd পুনরায় লোড করা হচ্ছে না" #: /etc/rc.d/init.d/postgresql:169 msgid "Initializing database: " msgstr "ডাটাবেস আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/vncserver:20 msgid "VNC server" msgstr "VNC সার্ভার" #: /etc/sysconfig/network-scripts/ifup-eth:62 msgid "Bridge support not available in this kernel" msgstr "এই কার্ণেলটি ব্রিজ সমর্থন করে না" #: /etc/rc.d/init.d/pand:36 msgid "Shutting down pand: " msgstr "pand বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-routes:5 msgid "usage: ifup-routes []" msgstr "ব্যবহারপদ্ধতি: ifup-routes []" #: /etc/rc.d/init.d/clvmd:162 msgid "Usage: $0 {start|stop|restart|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|status}" #: /etc/sysconfig/network-scripts/ifup-ppp:81 msgid "/etc/sysconfig/network-scripts/chat-${DEVNAME} does not exist for ${DEVICE}" msgstr "" "${DEVICE}-র জন্য /etc/sysconfig/network-scripts/chat-${DEVNAME} বর্তমানে " "উপস্থিত নেই" #: /etc/rc.d/init.d/pcmcia:98 msgid "using yenta_socket instead of $PCIC" msgstr "$PCIC -র পরিবর্তে yenta_socket ব্যবহার করা হচ্ছে" #: /etc/rc.d/init.d/radiusd:37 msgid "Starting RADIUS server: " msgstr "RADIUS সার্ভার আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifdown:13 #: /etc/sysconfig/network-scripts/ifdown:20 msgid "usage: ifdown " msgstr "ব্যবহারপদ্ধতি: ifdown " #: /etc/rc.d/init.d/nfslock:58 msgid "Starting NFS locking: " msgstr "NFS লকিং আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:1049 msgid "Missing parameter 'IPv4-tunnel address' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'IPv4-tunnel address' (arg 2)" #: /etc/rc.d/init.d/postgresql:160 msgid "An old version of the database format was found." msgstr "ডাটাবেস বিন্যাসের একটি পুরোনো সংস্করণ পাওয়া গেছে।" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1444 msgid "No reason given for sending trigger to radvd" msgstr "radvd-এ ট্রিগার প্রেরণ করার কোনো কারণ দর্শানো হয়নি" #: /etc/rc.d/init.d/arptables_jf:74 msgid "Applying arptables firewall rules: " msgstr "arptables ফায়ারওয়াল নিয়ম প্রয়োগ করা হচ্ছে: " #: /etc/rc.d/init.d/isicom:20 msgid "Loading isicom firmware... " msgstr "isicom ফার্মওয়্যার লোড করা হচ্ছে... " #: /etc/rc.d/init.d/microcode_ctl:95 msgid "Usage: $0 {start|stop|restart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart}" #: /etc/rc.d/init.d/rwhod:23 msgid "Starting rwho services: " msgstr "rwho পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/innd:45 msgid "Stopping INND service: " msgstr "INND পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/psacct:23 msgid "Shutting down process accounting: " msgstr "প্রসেস অ্যাকাউন্টিং পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/dund:34 msgid "Shutting down dund: " msgstr "dund বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/gpm:61 msgid "Shutting down console mouse services: " msgstr "কনসোল মাউস পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/ypbind:29 /etc/rc.d/init.d/ypserv:30 msgid "Setting NIS domain name $NISDOMAIN: " msgstr "$NISDOMAIN, NIS ডোমেইনের নাম নির্ধারণ করা হচ্ছে: " #: /etc/rc.d/init.d/kudzu:25 msgid "Checking for new hardware" msgstr "নতুন হার্ডওয়্যার অনুসন্ধান করা হচ্ছে" #: /etc/rc.d/init.d/ip6tables:27 msgid "ipchains and $IP6TABLES can not be used together." msgstr "ipchains এবং $IP6TABLES একসাথে ব্যবহার করা সম্ভব নয়।" #: /etc/rc.d/init.d/isdn:179 /etc/rc.d/init.d/isdn:182 msgid "Starting $prog" msgstr "$prog আরম্ভ করা হচ্ছে" #: /etc/rc.d/init.d/autofs:539 msgid "Reload map $command" msgstr "ম্যাপ $command পুনরায় লোড করো" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1332 msgid "" "Given IPv6 default gateway '$address' has scope '$device_scope' defined, " "given default gateway device '$device' will be not used" msgstr "" "প্রদত্ত IPv6 ডিফল্ট গেটওয়ে '$address'-র জন্য '$device_scope' পরিধি নির্ধারিত " "হয়েছে, প্রদত্ত ডিফল্ট গেটওয়ে ডিভাইস '$device' ব্যবহার করা হবে না" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1478 msgid "Unsupported mechanism '$mechanism' for sending trigger to radvd" msgstr "radvd-এ ট্রিগার প্রেরণ করার জন্য '$mechanism' পদ্ধতি সমর্থিত নয়" #: /etc/rc.d/init.d/postgresql:268 msgid "" "Usage: $0 {start|stop|status|restart|condrestart|condstop|reload|force-" "reload}" msgstr "" "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|condrestart|condstop|reload|force-" "reload}" #: /etc/sysconfig/network-scripts/ifup-ipv6:199 msgid "Given IPv4 address '$ipv4addr' is not globally usable" msgstr "প্রদত্ত IPv4 অ্যাড্রেস '$ipv4addr' -টি গ্লোবালরূপে ব্যবহারযোগ্য নয়" #: /etc/rc.d/init.d/smb:58 /etc/rc.d/init.d/smb:63 /etc/rc.d/init.d/winbind:51 msgid "Shutting down $KIND services: " msgstr "$KIND পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/ip6tables:257 /etc/rc.d/init.d/ip6tables:262 #: /etc/rc.d/init.d/iptables:257 /etc/rc.d/init.d/iptables:262 msgid "Firewall is not configured. " msgstr "ফায়ারওয়াল কনফিগার করা হয়নি। " #: /etc/sysconfig/network-scripts/network-functions-ipv6:178 msgid "Kernel is not compiled with IPv6 support" msgstr "কার্ণেলটি IPv6 সমর্থনসহ কম্পাইল করা হয়নি" #: /etc/rc.d/init.d/arptables_jf:106 msgid "Resetting built-in chains to the default ACCEPT policy:" msgstr "বিল্ট-ইন চেইনগুলিকে ডিফল্ট ACCEPT নীতি অনুযায়ী পুনরায় নির্ধারণ করা হচ্ছে:" #: /etc/rc.d/init.d/functions:439 msgid "Start service $1 (Y)es/(N)o/(C)ontinue? [Y] " msgstr "পরিসেবা $1আরম্ভ করা হবে কি (Y)হ্যাঁ/(N)না/(C)অগ্রসর? [Y] " #: /etc/rc.d/init.d/radiusd:56 msgid "Reloading RADIUS server: " msgstr "RADIUS সার্ভার পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:378 msgid "Checking filesystems" msgstr "ফাইল-সিস্টেম পরীক্ষা করা হচ্ছে" #: /etc/rc.d/init.d/arptables_jf:96 msgid "Removing user defined chains:" msgstr "ব্যবহারকারীর দ্বারা নির্ধারিত চেইন সরিয়ে ফেলা হচ্ছে: " #: /etc/rc.d/init.d/multipathd:36 msgid "Starting $prog daemon: " msgstr "$prog ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:411 msgid "*** Dropping you to a shell; the system will reboot" msgstr "*** একটি শেল-এ নিয়ে যাওয়া হচ্ছে; সিস্টেম এখন পুনরায় বুট করবে" #: /etc/rc.d/init.d/ip6tables:158 msgid "Applying $IP6TABLES firewall rules: " msgstr "$IP6TABLES ফায়ারওয়ালের নিয়মনীতি প্রয়োগ করা হচ্ছে: " #: /etc/rc.d/init.d/httpd:118 msgid "" "Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|" "graceful|help|configtest}" msgstr "" "ব্যবহারপদ্ধতি: $prog {start|stop|restart|condrestart|reload|status|fullstatus|" "graceful|help|configtest}" #: /etc/rc.d/init.d/postgresql:124 msgid "Starting ${NAME} service: " msgstr "${NAME} পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:145 msgid "Active CIFS mountpoints: " msgstr "সক্রিয় CIFS মাউন্ট-পয়েন্ট: " #: /etc/rc.d/init.d/syslog:33 msgid "Starting system logger: " msgstr "সিস্টেম লগার আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/nscd:67 /etc/rc.d/init.d/nscd:69 msgid "$prog shutdown" msgstr "$prog বন্ধ করা হচ্ছে" #: /etc/rc.d/init.d/sshd:53 msgid "Generating SSH2 RSA host key: " msgstr "SSH2 RSA হোস্ট কী (key) উত্পন্ন করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-eth:238 msgid "Error adding address ${IPADDR} for ${DEVICE}." msgstr "${DEVICE}-র জন্য ${IPADDR} ঠিকানা যোগ করতে সমস্যা হয়েছে" #: /etc/rc.d/init.d/pcmcia:105 msgid "cardmgr is already running." msgstr "cardmgr বর্তমানে চলছে।" #: /etc/rc.d/init.d/innd:33 msgid "Starting INND system: " msgstr "INND সিস্টেম আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/arptables_jf:138 /etc/rc.d/init.d/ip6tables:270 #: /etc/rc.d/init.d/iptables:270 msgid "Table: $table" msgstr "টেবিল: $table" #: /etc/rc.d/init.d/netfs:125 msgid "Configured SMB mountpoints: " msgstr "কনফিগার করা SMB মাউন্ট-পয়েন্ট: " #: /etc/rc.d/init.d/postfix:36 msgid "Starting postfix: " msgstr "postfix আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/ip6tables:118 /etc/rc.d/init.d/iptables:118 msgid "Setting chains to policy $policy: " msgstr "$policy পলিসির জন্য চেইন নির্ধারণ করা হচ্ছে: " #: /etc/rc.d/init.d/nfs:146 /etc/rc.d/init.d/nfslock:121 msgid "restart" msgstr "রিস্টার্ট" #: /etc/sysconfig/network-scripts/ifup-eth:219 msgid "Error, some other host already uses address ${IPADDR}." msgstr "ত্রুটি, অন্য কোনো হোস্টের দ্বারা বর্তমানে ${IPADDR} ঠিকানা ব্যবহৃত হচ্ছে।" #: /etc/rc.d/init.d/nfs:119 msgid "Shutting down NFS services: " msgstr "NFS পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:133 msgid "Configured NCP mountpoints: " msgstr "কনফিগার করা NCP মাউন্ট-পয়েন্ট: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:637 msgid "Cannot delete IPv6 address '$address' on dev '$device'" msgstr "'$device' ডিভাইসের উপর IPv6 address '$address' মুছে ফেলা যায়নি" #: /etc/sysconfig/network-scripts/network-functions-ipv6:519 msgid "Missing parameter 'IPv6-address' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'IPv6-address' (arg 2)" #: /etc/rc.d/init.d/functions:329 msgid "FAILED" msgstr "ব্যর্থ" #: /etc/rc.d/init.d/smb:42 /etc/rc.d/init.d/smb:47 /etc/rc.d/init.d/winbind:40 msgid "Starting $KIND services: " msgstr "$KIND পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/pcmcia:148 msgid "cardmgr is stopped" msgstr "cardmgr বন্ধ অবস্থায় রয়েছে" #: /etc/rc.d/init.d/acpid:77 /etc/rc.d/init.d/auditd:118 #: /etc/rc.d/init.d/messagebus:75 /etc/rc.d/init.d/multipathd:87 #: /etc/rc.d/init.d/readahead:46 /etc/rc.d/init.d/readahead_early:46 #: /etc/rc.d/init.d/rhnsd:82 /etc/rc.d/init.d/snmpd:86 #: /etc/rc.d/init.d/snmptrapd:76 /etc/rc.d/init.d/xinetd:117 msgid "Usage: $0 {start|stop|status|restart|condrestart|reload}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|condrestart|reload}" #: /etc/sysconfig/network-scripts/ifup-ipv6:241 msgid "Warning: interface 'tun6to4' does not support 'IPV6_DEFAULTGW', ignored" msgstr "সতর্কবাণী: 'tun6to4' ইন্টারফেসটি 'IPV6_DEFAULTGW' সমর্থন করে না, উপেক্ষা করা হচ্ছে" #: /etc/sysconfig/network-scripts/ifup-eth:85 msgid "Device ${DEVICE} does not seem to be present, delaying initialization." msgstr "ডিভাইস ${DEVICE} সম্ভবত উপস্থিত নেই, কিছু বিলম্বে আরম্ভ করা হবে।" #: /etc/sysconfig/network-scripts/network-functions-ipv6:724 msgid "Given IPv4 address '$testipv4addr_valid' has no proper format" msgstr "প্রদত্ত IPv4 অ্যাড্রেস '$testipv4addr_valid'-র কোনো সঠিক ফরমা উপস্থিত নেই" #: /etc/rc.d/init.d/network:277 msgid "Disabling IPv4 automatic defragmentation: " msgstr "IPv4 স্বয়ংক্রিয় ডিফ্র্যাগমেন্টেশন প্রক্রিয়া নিষ্ক্রিয় করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:341 msgid "Unknown error" msgstr "অজানা ত্রুটি" #: /etc/sysconfig/network-scripts/network-functions-ipv6:491 msgid "Tunnel device 'sit0' is still up" msgstr "টানেল ডিভাইস 'sit0' এখনো চলছে" #: /etc/rc.d/init.d/mdmonitor:43 /etc/rc.d/init.d/mdmonitor:47 msgid "mdadm" msgstr "mdadm" #: /etc/sysconfig/network-scripts/ifup-sit:72 msgid "Device '$DEVICE' is already up, please shutdown first" msgstr "'$DEVICE' ডিভাইসটি বর্তমানে সক্রিয় আছে, অনুগ্রহ করে একে প্রথমে নিষ্ক্রিয় করুন" #: /etc/rc.d/init.d/iptables:172 msgid "Loading additional $IPTABLES modules: " msgstr "অতিরিক্ত $IPTABLES মডিউল আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-sl:47 msgid "/etc/sysconfig/network-scripts/dip-$DEVICE does not exist for $DEVICE" msgstr "$DEVICE-র জন্য /etc/sysconfig/network-scripts/dip-$DEVICE বর্তমানে উপস্থিত নেই" #: /etc/rc.d/init.d/isicom:16 msgid "Loading PLX (isicom) modules... " msgstr "PLX (isicom) মডিউল লোড করা হচ্ছে... " #: /etc/rc.d/init.d/nfs:99 /etc/rc.d/init.d/nfs:124 msgid "Shutting down NFS mountd: " msgstr "NFS mountd বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/halt:218 msgid "On the next boot fsck will be forced." msgstr "পরবর্তী বুটের সময় বাধ্যতামূলকভাবে fsck চালানো হবে।" #: /etc/rc.d/init.d/functions:351 msgid "WARNING" msgstr "সতর্কবাণী" #: /etc/rc.d/init.d/network:82 msgid "Setting 802.1Q VLAN parameters: " msgstr "802.1Q VLAN পরামিতি নির্ধারণ করা হচ্ছে: " #: /etc/rc.d/init.d/named:174 msgid "Usage: $0 {start|stop|status|restart|condrestart|reload|probe}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|condrestart|reload|probe}" #: /etc/rc.d/init.d/sendmail:110 msgid "Shutting down sm-client: " msgstr "sm-client বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-aliases:310 msgid "error in $FILE: IPADDR_START greater than IPADDR_END" msgstr "$FILE-এ ত্রুটি: IPADDR_START-র মান IPADDR_END থেকে বেশি" #: /etc/rc.d/rc.sysinit:180 msgid " storage" msgstr " সংরক্ষণব্যবস্থা" #: /etc/rc.d/init.d/autofs:525 msgid "Checking for changes to /etc/auto.master ...." msgstr "/etc/auto.master-র মধ্যে কোনো পরিবর্তন করা হয়েছে কি না তা পরীক্ষা করা হচ্ছে ...." #: /etc/rc.d/init.d/autofs:484 msgid "No Mountpoints Defined" msgstr "কোনো মাউন্টপয়েন্ট নির্ধারণ করা হয়নি" #: /etc/rc.d/rc.sysinit:448 msgid "Converting old group quota files: " msgstr "দলের পুরোনো quota ফাইল রূপান্তর করা হচ্ছে: " #: /etc/rc.d/init.d/network:292 msgid "Configured devices:" msgstr "কনফিগার করা ডিভাইসসমূহ:" #: /etc/sysconfig/network-scripts/network-functions-ipv6:674 msgid "Given IPv6 address '$testipv6addr_valid' is not valid" msgstr "প্রদত্ত IPv6 অ্যাড্রেস '$testipv6addr_valid' বৈধ নয়" #: /etc/rc.d/init.d/radiusd:45 msgid "Stopping RADIUS server: " msgstr "RADIUS সার্ভার বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/ldap:97 msgid "$file is not owned by \"$user\"" msgstr "$file-টি \"$user\"-র মালিকানাধীন নেই" #: /etc/rc.d/init.d/ospf6d:59 msgid "Usage: $prog {start|stop|restart|reload|condrestart|status}" msgstr "ব্যবহারপদ্ধতি: $prog {start|stop|restart|reload|condrestart|status}" #: /etc/rc.d/init.d/rdisc:28 msgid "Starting router discovery: " msgstr "রাউটার ডিস্কভারি আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:44 msgid "Mounting other filesystems: " msgstr "অন্যান্য ফাইল-সিস্টেম মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:102 msgid "Unmounting NFS filesystems: " msgstr "NFS ফাইল-সিস্টেম মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/nfslock:77 msgid "Stopping NFS locking: " msgstr "NFS লকিং বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/autofs:424 /etc/rc.d/init.d/autofs:447 msgid "Unmounting loopback filesystem $match: " msgstr "লুপব্যাক ফাইল-সিস্টেম $match আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/atalk:23 msgid "Starting AppleTalk services: " msgstr "AppleTalk পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ppp:49 msgid "pppd does not exist or is not executable for ${DEVICE}" msgstr "pppd বর্তমানে উপস্থিত নেই অথবা ${DEVICE} ডিভাইসের জন্য চালানো সম্ভব নয়" #: /etc/sysconfig/network-scripts/ifdown:31 #: /etc/sysconfig/network-scripts/ifup:41 msgid "Users cannot control this device." msgstr "ব্যবহারকারীরা এই ডিভাইসটি নিয়ন্ত্রণ করতে সক্ষম নন।" #: /etc/sysconfig/network-scripts/ifup-ppp:79 msgid "ifup-ppp for ${DEVNAME} exiting" msgstr "${DEVNAME}-র জন্য ifup-ppp এখন প্রস্থান করছে" #: /etc/sysconfig/network-scripts/ifup-sl:33 #: /etc/sysconfig/network-scripts/ifup-sl:45 msgid "ifup-sl for $DEVICE exiting" msgstr "$DEVICE-র জন্য ifup-sl থেকে প্রস্থান করা হচ্ছে" #: /etc/sysconfig/network-scripts/network-functions-ipv6:118 msgid "WARN " msgstr "সতর্কবাণী " #: /etc/sysconfig/network-scripts/network-functions-ipv6:338 msgid "" "'No route to host' adding route '$networkipv6' via gateway '$gatewayipv6' " "through device '$device'" msgstr "" "'$gatewayipv6' গেটওয়ের মাধ্যমে '$device' ডিভাইস ব্যবহার করে '$networkipv6' " "route যোগ করার সময় 'No route to host' ত্রুটির সম্মুখীন হওয়া গিয়েছে" #: /etc/rc.d/init.d/network:147 /etc/rc.d/init.d/network:158 msgid "Bringing up interface $i: " msgstr "$i ইন্টারফেসটি তৈরি করা হচ্ছে: " #: /etc/rc.d/init.d/vncserver:58 /etc/rc.d/init.d/vncserver:59 msgid "vncserver shutdown" msgstr "vncserver বন্ধ করা হচ্ছে" #: /etc/rc.d/init.d/pcmcia:113 /etc/rc.d/init.d/pcmcia:136 msgid "done." msgstr "সম্পন্ন।" #: /etc/rc.d/init.d/iptables:22 msgid "/sbin/$IPTABLES does not exist." msgstr "/sbin/$IPTABLES বর্তমানে উপস্থিত নেই।" #: /etc/sysconfig/network-scripts/ifup-eth:53 msgid "Bridge support not available: brctl not found" msgstr "ব্রিজ সমর্থন উপলব্ধ নয়: brctl পাওয়া যায়নি" #: /etc/rc.d/init.d/pcmcia:119 msgid "Shutting down PCMCIA services: " msgstr "PCMCIA পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/ip6tables:85 /etc/rc.d/init.d/iptables:85 msgid "Flushing firewall rules: " msgstr "ফায়ারওয়ালের নিয়ম পরিশ্রুত করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:486 msgid "Mounting local filesystems: " msgstr "স্থানীয় ফাইল-সিস্টেম মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/postfix:89 msgid "postfix check" msgstr "postfix check" #: /etc/rc.d/init.d/halt:164 msgid "Unmounting pipe file systems (retry): " msgstr "pipe ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে (পুনরায় চেষ্টা করো): " #: /etc/rc.d/init.d/iiim:32 msgid "Stopping IIIMF input server: " msgstr "IIIMF ইনপুট সার্ভার বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:95 msgid "ERROR: [ipv6_log] Loglevel isn't valid '$level' (arg 2)" msgstr "ত্রুটি: [ipv6_log] Loglevel বৈধ নয় '$level' (arg 2)" #: /etc/sysconfig/network-scripts/network-functions-ipv6:127 msgid "NOTICE " msgstr "বিজ্ঞপ্তি " #: /etc/rc.d/init.d/autofs:521 msgid "$prog not running" msgstr "$prog চলছে না" #: /etc/rc.d/init.d/arptables_jf:60 msgid "Clearing all current rules and user defined chains:" msgstr "সমস্ত বর্তমান নিয়ম এবং ব্যবহারকারীর দ্বারা নির্ধারিত চেইন মুছে ফেলা হচ্ছে:" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1089 msgid "Tunnel device '$device' bringing up didn't work" msgstr "টানেল ডিভাইস '$device' আরম্ভ করা সম্ভব হয়নি" #: /etc/rc.d/init.d/nifd:34 msgid "Shutting down nifd services: " msgstr "nifd পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-eth:180 msgid " failed." msgstr " ব্যর্থ।" #: /etc/sysconfig/network-scripts/network-functions-ipv6:121 msgid "CRITICAL " msgstr "গুরুত্বপূর্ণ " #: /etc/rc.d/init.d/nfs:64 msgid "Starting NFS quotas: " msgstr "NFS quota আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:911 msgid "Missing parameter 'global IPv4 address' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'global IPv4 address' (arg 2)" #: /etc/sysconfig/network-scripts/ifup-ppp:78 msgid "/etc/sysconfig/network-scripts/chat-${DEVNAME} does not exist" msgstr "/etc/sysconfig/network-scripts/chat-${DEVNAME} বর্তমানে উপস্থিত নেই" #: /etc/rc.d/rc.sysinit:410 msgid "*** An error occurred during the file system check." msgstr "*** ফাইল-সিস্টেম পরীক্ষণের সময় একটি সমস্যা দেখা দিয়েছে।" #: /etc/rc.d/init.d/arptables_jf:144 msgid "Changing target policies to DROP: " msgstr "উদ্দিষ্ট নীতিগুলিকে DROP-এ পরিবর্তন করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ippp:362 #: /etc/sysconfig/network-scripts/ifup-isdn:362 msgid "Warning: link doesn't support IPv6 using encapsulation 'rawip'" msgstr "সতর্কবাণী: 'rawip' এনক্যাপসুলেশনর মাধ্যমে এই লিঙ্কটি IPv6 সমর্থন করে না" #: /etc/sysconfig/network-scripts/ifup-ppp:86 msgid "Setting up a new ${PEERCONF} config file" msgstr "নতুন ${PEERCONF} কনফিগ ফাইল সেটআপ করা হচ্ছে" #: /etc/rc.d/init.d/pcmcia:71 msgid "PCIC module not defined in startup options!" msgstr "স্টার্ট-আপ অপশনে PCIC মডিউল ব্যাখ্যা করা হয়নি!" #: /etc/rc.d/init.d/syslog:47 msgid "Shutting down system logger: " msgstr "সিস্টেম লগার বন্ধ করা হচ্ছে: " #: /etc/rc.d/rc:62 msgid "Stopping $subsys: " msgstr "$subsys বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/ipsec:98 msgid "cannot find ipsec command" msgstr "ipsec কমান্ড পাওয়া যায়নি" #: /etc/sysconfig/network-scripts/ifup-eth:168 msgid " failed; no link present. Check cable?" msgstr " ব্যর্থ; কোনো লিঙ্ক উপস্থিত নেই। কেবল (cable) উপস্থিত কিনা তা পরীক্ষা করুন?" #: /etc/rc.d/init.d/isdn:150 /etc/rc.d/init.d/isdn:152 msgid "Loading Firmware" msgstr "ফার্মওয়্যার লোড করা হচ্ছে" #: /etc/rc.d/init.d/nfslock:131 msgid "Usage: $0 {start|stop|status|restart|probe|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|probe|condrestart}" #: /etc/rc.d/init.d/microcode_ctl:30 msgid "$0: microcode datafile not present (/etc/firmware/microcode.dat)" msgstr "$0: microcode ডাটাফাইল উপস্থিত নেই (/etc/firmware/microcode.dat)" #: /etc/rc.d/init.d/sshd:132 msgid "Reloading $prog" msgstr "$prog পুনরায় লোড করা হচ্ছে" #: /etc/rc.d/init.d/halt:61 msgid "Sending all processes the KILL signal..." msgstr "সমস্ত প্রসেসকে KILL সিগ্যাল প্রেরণ করা হচ্ছে..." #: /etc/rc.d/init.d/netdump:275 /etc/rc.d/init.d/netdump:283 msgid "disabling netdump" msgstr "netdump নিষ্ক্রিয় করা হচ্ছে" #: /etc/rc.d/init.d/ldap:103 /etc/rc.d/init.d/ldap:109 msgid "$file is not readable by \"$user\"" msgstr "\"$user\"-র $file-টি পড়ার অনুমতি নেই" #: /etc/rc.d/init.d/arptables_jf:161 msgid "Saving current rules to $ARPTABLES_CONFIG: " msgstr "$ARPTABLES_CONFIG-এ বর্তমান নিয়ম সংরক্ষণ করা হচ্ছে: " #: /etc/rc.d/init.d/anacron:56 /etc/rc.d/init.d/atd:80 #: /etc/rc.d/init.d/canna:64 /etc/rc.d/init.d/cpuspeed:80 #: /etc/rc.d/init.d/dhcp6r:75 /etc/rc.d/init.d/dhcp6s:79 #: /etc/rc.d/init.d/dhcrelay:78 /etc/rc.d/init.d/dictd:74 #: /etc/rc.d/init.d/gpm:94 /etc/rc.d/init.d/iiim:60 /etc/rc.d/init.d/ipsec:197 #: /etc/rc.d/init.d/ipsec:202 /etc/rc.d/init.d/ntpd:139 #: /etc/rc.d/init.d/sendmail:149 /etc/rc.d/init.d/ups:116 #: /etc/rc.d/init.d/vncserver:88 /etc/rc.d/init.d/vsftpd:82 msgid "Usage: $0 {start|stop|restart|condrestart|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|condrestart|status}" #: /etc/rc.d/init.d/autofs:324 msgid "" "Configured Mount Points:\n" "------------------------" msgstr "" "কনফিগার করা মাউন্ট-পয়েন্ট:\n" "------------------------" #: /etc/sysconfig/network-scripts/network-functions-ipv6:692 msgid "" "On given address '$testipv6addr_valid' the prefix length is out of range " "(valid: 0-128)" msgstr "" "প্রদত্ত ঠিকানা '$testipv6addr_valid'-র প্রেফিক্সের দৈর্ঘ্য নির্ধারিত সীমা উল্লঙ্ঘন " "করেছে (বৈধ মান: ০-১২৮)" #: /etc/rc.d/init.d/ntpd:83 msgid "$prog: Synchronizing with time server: " msgstr "$prog: টাইম সার্ভারের সাথে সমঞ্জস করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:443 msgid "Converting old user quota files: " msgstr "ব্যবহারকারীর পুরোনো quota ফাইলগুলি রূপান্তর করা হচ্ছে: " #: /etc/rc.d/init.d/vsftpd:32 msgid "Starting $prog for $site: " msgstr "$site-র জন্য $prog আরম্ভ করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:489 msgid "Enabling local filesystem quotas: " msgstr "স্থানীয় ফাইল-সিস্টেমের quota সক্রিয় করা হচ্ছে: " #: /etc/rc.d/init.d/dund:60 /etc/rc.d/init.d/hidd:60 /etc/rc.d/init.d/pand:63 msgid "Usage: $0 {start|stop|restart|reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|reload|condrestart}" #: /etc/rc.d/init.d/functions:310 /etc/rc.d/init.d/kudzu:58 msgid "${base} is stopped" msgstr "${base} বন্ধ করা হয়েছে" #: /etc/sysconfig/network-scripts/ifup-aliases:110 #: /etc/sysconfig/network-scripts/network-functions:40 msgid "Missing config file $PARENTCONFIG." msgstr "কনফিগ ফাইল $PARENTCONFIG অনুপস্থিত।" #: /etc/rc.d/init.d/rpcidmapd:38 msgid "Starting RPC idmapd: " msgstr "RPC idmapd আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/sshd:79 /etc/rc.d/init.d/sshd:82 msgid "DSA key generation" msgstr "DSA কী (key) উত্পাদন পদ্ধতি" #: /etc/rc.d/init.d/ypserv:44 msgid "Stopping YP server services: " msgstr "YP সার্ভার পরিসেবা বন্ধ করা হচ্ছে:" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1189 msgid "Unsupported selection '$selection' specified (arg 2)" msgstr "অসমর্থিত নির্বাচন '$selection' উল্লিখিত হয়েছে (arg 2)" #: /etc/rc.d/init.d/halt:216 msgid "On the next boot fsck will be skipped." msgstr "পরবর্তী বুটের সময় fsck এড়িয়ে যাওয়া হবে।" #: /etc/sysconfig/network-scripts/ifup-eth:210 msgid "Failed to bring up ${DEVICE}." msgstr "${DEVICE} আরম্ভ করতে ব্যর্থ।" #: /etc/sysconfig/network-scripts/network-functions-ipv6:662 #: /etc/sysconfig/network-scripts/network-functions-ipv6:716 msgid "Parameter '$modequiet' for 'quiet' mode is not valid (arg 2)" msgstr "'quiet' মোডের জন্য '$modequiet' পরামিতিটি বৈধ নয় (arg 2)" #: /etc/rc.d/init.d/halt:69 msgid "Saving mixer settings" msgstr "মিক্সারের বৈশিষ্ট্যাবলী সংরক্ষণ করা হচ্ছে" #: /etc/sysconfig/network-scripts/network-functions-ipv6:452 msgid "Tunnel device 'sit0' enabling didn't work" msgstr "টানেল ডিভাইস 'sit0' কে সক্রিয় করা যায়নি" #: /etc/sysconfig/network-scripts/network-functions-ipv6:262 msgid "Missing parameter 'forwarding control' (arg 1)" msgstr "অনুপস্থিত পরামিতি 'forwarding control' (arg 1)" #: /etc/rc.d/init.d/bluetooth:34 msgid "Starting Bluetooth services:" msgstr "Bluetooth পরিসেবা আরম্ভ করা হচ্ছে:" #: /etc/rc.d/rc.sysinit:117 msgid "\t\tPress 'I' to enter interactive startup." msgstr "\t\t'I' টিপে ইন্টারেক্টিভ স্টার্টআপে প্রবেশ করুন।" #: /etc/rc.d/init.d/sshd:72 msgid "Generating SSH2 DSA host key: " msgstr "SSH2 DSA হোস্ট কী (key) উত্পন্ন করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup:87 msgid "No 802.1Q VLAN support available in kernel for device ${DEVICE}" msgstr "${DEVICE}-র জন্য কার্ণেলে কোনো 802.1Q VLAN সমর্থন উপস্থিত নেই" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1383 msgid "Given IPv6 default device '$device' doesn't exist or isn't up" msgstr "উল্লিখিত IPv6 ডিফল্ট ডিভাইস '$device' বর্তমানে উপস্থিত নেই অথবা চলছে না" #: /etc/sysconfig/network-scripts/ifup-sl:32 msgid "/usr/sbin/dip does not exist or is not executable" msgstr "/usr/sbin/dip বর্তমানে চলছে না অথবা চালানো সম্ভব নয়" #: /etc/rc.d/rc.sysinit:549 msgid "Resetting hostname ${HOSTNAME}: " msgstr "হোস্ট-নেম ${HOSTNAME}-কে পুনরায় নির্ধারণ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:113 msgid "Unmounting SMB filesystems: " msgstr "SMB ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:613 msgid "Missing parameter 'IPv6 address' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'IPv6 address' (arg 2)" #: /etc/rc.d/init.d/halt:186 msgid "Unmounting file systems: " msgstr "ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/functions:160 msgid "Usage: killproc {program} [signal]" msgstr "ব্যবহারপদ্ধতি: killproc {program} [signal]" #: /etc/rc.d/rc.sysinit:308 msgid "Setting hostname ${HOSTNAME}: " msgstr "হোস্ট-নেম ${HOSTNAME} নির্ধারণ করা হচ্ছে: " #: /etc/rc.d/init.d/yppasswdd:40 msgid "Starting YP passwd service: " msgstr "YP passwd পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:32 msgid "ERROR: [ipv6_log] Missing 'message' (arg 1)" msgstr "ত্রুটি: [ipv6_log] অনুপস্থিত 'message' (arg 1)" #: /etc/sysconfig/network-scripts/ifdown-aliases:7 #: /etc/sysconfig/network-scripts/ifup-ipx:7 msgid "usage: $0 " msgstr "ব্যবহারপদ্ধতি: $0 " #: /etc/rc.d/init.d/xend:46 msgid "Usage: $0 {start|stop|status|restart|reload|force-reload}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|reload|force-reload}" #: /etc/rc.d/init.d/halt:75 msgid "Saving random seed: " msgstr "র্‌‍যান্ডোম সীড (seed) সংরক্ষণ করা হচ্ছে: " #: /etc/rc.d/init.d/isdn:123 /etc/rc.d/init.d/isdn:126 msgid "Loading ISDN modules" msgstr "ISDN মডিউল লোড করা হচ্ছে" #: /etc/rc.d/init.d/microcode_ctl:22 msgid "$0: microcode device $DEVICE doesn't exist?" msgstr "$0: microcode ডিভাইস $DEVICE কি বর্তমানে উপস্থিত নেই?" #: /etc/rc.d/init.d/privoxy:200 msgid "Can't find $PRIVOXY_CONF, exit." msgstr "$PRIVOXY_CONF পাওয়া যায়নি, প্রস্থান করো।" #: /etc/sysconfig/network-scripts/ifup-ipv6:103 #: /etc/sysconfig/network-scripts/ifup-ipv6:120 msgid "Please restart network with '/sbin/service network restart'" msgstr "অনুগ্রহ করে '/sbin/service network restart' ব্যবহার করে নেটওয়ার্ক পুনরায় আরম্ভ করুন" #: /etc/rc.d/init.d/sendmail:76 msgid "reloading $prog: " msgstr "$prog পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:412 msgid "*** when you leave the shell." msgstr "*** আপনি যখন শেল থেকে প্রস্থান করবেন।" #: /etc/rc.d/init.d/sendmail:58 msgid "Starting sm-client: " msgstr "sm-client আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/lisa:87 msgid "Usage: $prog {start|stop|restart|status|condrestart}" msgstr "ব্যবহারপদ্ধতি: $prog {start|stop|restart|status|condrestart}" #: /etc/rc.d/init.d/nifd:25 msgid "Starting nifd... " msgstr "nifd আরম্ভ করা হচ্ছে... " #: /etc/rc.d/init.d/netfs:41 msgid "Mounting CIFS filesystems: " msgstr "CIFS ফাইল-সিস্টেম মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/arpwatch:66 /etc/rc.d/init.d/bluetooth:75 #: /etc/rc.d/init.d/irqbalance:87 /etc/rc.d/init.d/nscd:109 #: /etc/rc.d/init.d/portmap:91 /etc/rc.d/init.d/radiusd:76 #: /etc/rc.d/init.d/radvd:74 /etc/rc.d/init.d/yppasswdd:79 #: /etc/rc.d/init.d/ypserv:74 /etc/rc.d/init.d/ypxfrd:61 msgid "Usage: $0 {start|stop|status|restart|reload|condrestart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|restart|reload|condrestart}" #: /etc/rc.d/init.d/functions:259 msgid "Usage: pidofproc {program}" msgstr "ব্যবহারপদ্ধতি: pidofproc {program}" #: /etc/rc.d/init.d/rusersd:26 msgid "Starting rusers services: " msgstr "rusers পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:137 msgid "Active NFS mountpoints: " msgstr "সক্রিয় NFS মাউন্ট-পয়েন্ট: " #: /etc/rc.d/init.d/kudzu:55 msgid "${base} has run" msgstr "${base} চালানো হয়েছে" #: /etc/rc.d/init.d/nfs:70 msgid "Starting NFS daemon: " msgstr "NFS ডেমন আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:873 msgid "Given address '$addr' is not a global IPv4 one (arg 1)" msgstr "প্রদত্ত অ্যাড্রেস '$addr' কোনো গ্লোবাল IPv4 অ্যাড্রেস নয় (arg 1)" #: /etc/rc.d/init.d/firstboot:54 msgid "Running system reconfiguration tool" msgstr "সিস্টেম পুনরায় কনফিগার করার টুল চালানো হচ্ছে" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1185 msgid "Missing parameter 'selection' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'selection' (arg 2)" #: /etc/sysconfig/network-scripts/ifup-ipv6:212 msgid "" "IPv6to4 configuration needs an IPv4 address on related interface or " "otherwise specified" msgstr "" "IPv6to4 কনফিগারেশনের জন্য, প্রযোজ্য অথবা অন্য কোনো উল্লিখিত ইন্টারফেসের উপর একটি " "IPv4 ঠিকানা প্রয়োজন" #: /etc/rc.d/init.d/nfs:53 msgid "Starting NFS services: " msgstr "NFS পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/microcode_ctl:50 msgid "Applying Intel Microcode update: " msgstr "Intel Microcode আপডেট প্রয়োগ করা হচ্ছে: " #: /etc/rc.d/init.d/haldaemon:27 msgid "Starting HAL daemon: " msgstr "HAL ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/cups-config-daemon:25 msgid "Starting cups-config-daemon: " msgstr "cups-config-daemon ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/functions:318 msgid "OK" msgstr "ঠিক আছে" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1082 msgid "Tunnel device '$device' creation didn't work" msgstr "টানেল ডিভাইস '$device' কাজ করতে সক্ষম হয়নি" #: /etc/rc.d/init.d/rpcidmapd:63 msgid "Shutting down RPC idmapd: " msgstr "RPC idmapd বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/halt:51 /etc/rc.d/init.d/killall:10 msgid "Usage: $0 {start}" msgstr "ব্যবহারপদ্ধতি: $0 {start}" #: /etc/rc.d/rc.sysinit:394 /etc/rc.d/rc.sysinit:419 msgid "Unmounting file systems" msgstr "ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে" #: /etc/rc.d/init.d/diskdump:137 msgid "Starting diskdump: " msgstr "diskdump আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/pand:27 msgid "Starting pand: " msgstr "pand আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/acpid:36 msgid "Stopping acpi daemon: " msgstr "acpi ডেমন আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:533 msgid "Device '$device' doesn't exist" msgstr "'$device' ডিভাইস বর্তমানে উপস্থিত নেই" #: /etc/rc.d/init.d/smartd:57 msgid "Reloading $prog daemon configuration: " msgstr "$prog ডেমন কনফিগারেশন পুনরায় লোড করা হচ্ছে: " #: /etc/rc.d/init.d/postgresql:162 msgid "See $SYSDOCDIR/postgresql-$PGVERSION/README.rpm-dist for more information." msgstr "অধিক বিবরণের জন্য $SYSDOCDIR/postgresql-$PGVERSION/README.rpm-dist দেখুন।" #: /etc/rc.d/rc.sysinit:279 msgid "Setting clock $CLOCKDEF: `date`" msgstr "$CLOCKDEF ঘড়ি নির্ধারণ করা হচ্ছে: `date`" #: /etc/rc.d/init.d/postfix:48 msgid "postalias $alias_database" msgstr "postalias $alias_database" #: /etc/sysconfig/network-scripts/network-functions-ipv6:413 #: /etc/sysconfig/network-scripts/network-functions-ipv6:514 #: /etc/sysconfig/network-scripts/network-functions-ipv6:577 #: /etc/sysconfig/network-scripts/network-functions-ipv6:608 #: /etc/sysconfig/network-scripts/network-functions-ipv6:791 #: /etc/sysconfig/network-scripts/network-functions-ipv6:906 #: /etc/sysconfig/network-scripts/network-functions-ipv6:968 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1002 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1044 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1122 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1180 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1233 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1272 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1406 msgid "Missing parameter 'device' (arg 1)" msgstr "অনুপস্থিত পরামিতি 'device' (arg 1)" #: /etc/rc.d/init.d/halt:140 /etc/rc.d/init.d/netfs:58 msgid "Unmounting loopback filesystems: " msgstr "লুপব্যাক ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/ip6tables:22 msgid "/sbin/$IP6TABLES does not exist." msgstr "/sbin/$IP6TABLES বর্তমানে উপস্থিত নেই।" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1490 msgid "Given pidfile '$pidfile' doesn't exist, cannot send trigger to radvd" msgstr "প্রদত্ত pidfile '$pidfile' বর্তমানে উপস্থিত নেই, radvd-এ ট্রিগার প্রেরণ করা সম্ভব নয়" #: /etc/rc.d/init.d/halt:39 msgid "Please stand by while rebooting the system..." msgstr "আপনার সিস্টেম পুনরায় বুট করা হচ্ছে, অনুগ্রহ করে অপক্ষা করুন..." #: /etc/rc.d/init.d/netfs:42 msgid "Mounting NCP filesystems: " msgstr "NCP ফাইল-সিস্টেম মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/netdump:264 msgid "initializing netconsole" msgstr "netconsole আরম্ভ করা হচ্ছে" #: /etc/rc.d/init.d/functions:340 msgid "PASSED" msgstr "PASSED" #: /etc/rc.d/init.d/netdump:279 msgid "disabling netconsole" msgstr "netconsole নিষ্ক্রিয় করা হচ্ছে" #: /etc/rc.d/init.d/xfs:109 msgid "Restarting $prog:" msgstr "$prog পুনরায় আরম্ভ করা হচ্ছে:" #: /etc/rc.d/init.d/sshd:34 msgid "Generating SSH1 RSA host key: " msgstr "SSH1 RSA হোস্ট কী(key) উত্পন্ন করা হচ্ছে: " #: /etc/rc.d/init.d/iptables:195 msgid "Unloading $IPTABLES modules: " msgstr "$IPTABLES মডিউল আনলোড করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:684 msgid "Missing prefix length for given address '$testipv6addr_valid'" msgstr "প্রদত্ত ঠিকানা '$testipv6addr_valid'-র প্রেফিক্সের দৈর্ঘ্য উপস্থিত নেই" #: /etc/rc.d/init.d/halt:124 msgid "Turning off swap: " msgstr "swap বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/privoxy:199 msgid "Can't find $PRIVOXY_BIN, exit." msgstr "$PRIVOXY_BIN পাওয়া যায়নি, প্রস্থান করো।" #: /etc/sysconfig/network-scripts/ifup-aliases:152 msgid "error in $FILE: already seen ipaddr $IPADDR in $ipseen" msgstr "$FILE-এ সমস্যা: $ipseen-র মধ্যে ipaddr $IPADDR পাওয়া গিয়েছে" #: /etc/rc.d/init.d/innd:52 msgid "Stopping INNWatch service: " msgstr "INNWatch পরিসেবা বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:1516 msgid "radvd not (properly) installed, triggering failed" msgstr "radvd (সঠিকভাবে) ইনস্টল করা হয়নি, ট্রিগার করতে ব্যর্থ" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1277 msgid "Missing parameter 'IPv6 MTU' (arg 2)" msgstr "অনুপস্থিত পরামিতি 'IPv6 MTU' (arg 2)" #: /etc/rc.d/init.d/xendomains:166 msgid "Usage: $0 {start|stop|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status}" #: /etc/rc.d/init.d/ypserv:35 msgid "Starting YP server services: " msgstr "YP সার্ভার পরিসেবা আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/kadmin:90 msgid "Usage: $0 {start|stop|status|condrestart|reload|restart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|condrestart|reload|restart}" #: /etc/rc.d/init.d/isicom:30 msgid "Failed to load module: isicom" msgstr "মডিউল লোড করতে ব্যর্থ: isicom" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1380 msgid "Given IPv6 default device '$device' requires an explicit nexthop" msgstr "প্রদত্ত IPv6 ডিফল্ট ডিভাইস '$device' -র জন্য একটি সুস্পষ্ট nexthop প্রয়োজন" #: /etc/rc.d/init.d/functions:443 msgid "cC" msgstr "cC" #: /etc/rc.d/init.d/nfslock:62 msgid "Starting NFS statd: " msgstr "NFS statd আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:917 #: /etc/sysconfig/network-scripts/network-functions-ipv6:974 #: /etc/sysconfig/network-scripts/network-functions-ipv6:1013 msgid "Given device '$device' is not supported (arg 1)" msgstr "প্রদত্ত ডিভাইস '$device' সমর্থিত নয় (arg 1)" #: /etc/rc.d/init.d/functions:301 msgid "${base} dead but pid file exists" msgstr "${base} নির্বাপিত হয়েছে কিন্তু pid ফাইল বর্তমানে উপস্থিত আছে" #: /etc/rc.d/init.d/mysqld:140 msgid "Usage: $0 {start|stop|status|condrestart|restart}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|status|condrestart|restart}" #: /etc/rc.d/init.d/postfix:53 msgid "postfix start" msgstr "postfix start" #: /etc/rc.d/init.d/autofs:491 msgid "Stopping $prog:" msgstr "$prog বন্ধ করা হচ্ছে:" #: /etc/rc.d/rc.sysinit:207 msgid " audio" msgstr " অডিও" #: /etc/rc.d/init.d/cups:114 msgid "Usage: $prog {start|stop|restart|condrestart|reload|status}" msgstr "ব্যবহারপদ্ধতি: $prog {start|stop|restart|condrestart|reload|status}" #: /etc/rc.d/rc.sysinit:298 msgid "Loading default keymap: " msgstr "ডিফল্ট কীম্যাপ (keymap) লোড করা হচ্ছে: " #: /etc/rc.d/init.d/gdm-early-login:22 msgid "Starting display manager: " msgstr "ডিসপ্লে ম্যানেজার আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:100 msgid "Unmounting NFS filesystems (retry): " msgstr "NFS ফাইল-সিস্টেম আনমাউন্ট করা হচ্ছে (পুনরায় চেষ্টা করো): " #: /etc/rc.d/init.d/nfs:141 /etc/rc.d/init.d/nfslock:112 msgid "start" msgstr "আরম্ভ" #: /etc/rc.d/init.d/network:246 /etc/rc.d/init.d/network:256 msgid "Shutting down interface $i: " msgstr "ইন্টারফেস $i বন্ধ করা হচ্ছে: " #: /etc/rc.d/rc.sysinit:214 msgid " done" msgstr " সম্পন্ন" #: /etc/sysconfig/network-scripts/ifup:126 msgid "WARNING: vconfig not able to disable REORDER_HDR on ${DEVICE}" msgstr "সতর্কবাণী: vconfig, ${DEVICE}-র উপর REORDER_HDR নিষ্ক্রিয় করতে সক্ষম হয়নি" #: /etc/rc.d/rc.sysinit:200 msgid " network" msgstr " নেটওয়ার্ক" #: /etc/sysconfig/network-scripts/network-functions-ipv6:1340 msgid "" "Given IPv6 default gateway '$address' is link-local, but no scope or gateway " "device is specified" msgstr "" "প্রদত্ত IPv6 ডিফল্ট গেটওয়ে '$address'-টি link-local, কিন্তু গেটওয়ে ডিভাইসের জন্য " "কোনো পরিধি নির্ধারণ করা হয়নি" #: /etc/rc.d/init.d/nfslock:84 msgid "Stopping NFS statd: " msgstr "NFS statd বন্ধ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-ipv6:172 msgid "Device 'tun6to4' (from '$DEVICE') is already up, shutdown first" msgstr "'tun6to4' ডিভাইসটি ('$DEVICE'-র) বর্তমানে চলছে, প্রথমে এটিকে বন্ধ করুন" #: /etc/rc.d/init.d/autofs:473 /etc/rc.d/init.d/autofs:526 #: /etc/rc.d/init.d/autofs:527 msgid "could not make temp file" msgstr "temp ফাইল তৈরি করা যায়নি" #: /etc/rc.d/init.d/iptables:27 msgid "ipchains and $IPTABLES can not be used together." msgstr "ipchains এবং $IPTABLES একসঙ্গে ব্যবহার করা যাবে না।" #: /etc/rc.d/init.d/netplugd:41 msgid "Shutting down network plug daemon: " msgstr "নেটওয়ার্ক প্লাগ ডেমন বন্ধ করা হচ্ছে: " #: /etc/rc.d/init.d/sshd:41 /etc/rc.d/init.d/sshd:44 msgid "RSA1 key generation" msgstr "RSA1 কী (key) উত্পাদন" #: /etc/rc.d/init.d/apmd:26 msgid "Starting up APM daemon: " msgstr "APM ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/isdn:139 msgid "Unloading ISDN modules" msgstr "ISDN মডিউল আনলোড করা হচ্ছে" #: /etc/sysconfig/network-scripts/ifup-ipv6:300 msgid "6to4 configuration is not valid" msgstr "6to4 কনফিগারেশনটি বৈধ নয়" #: /etc/rc.d/init.d/netdump:256 /etc/rc.d/init.d/netdump:260 msgid "initializing netdump" msgstr "netdump আরম্ভ করা হচ্ছে" #: /etc/rc.d/init.d/microcode_ctl:66 msgid "$0: kernel does not have microcode device support" msgstr "$0: কার্ণেলে মাইক্রোকোড ডিভাইস সমর্থন উপস্থিত নেই" #: /etc/rc.d/init.d/ip6tables:195 msgid "Unloading $IP6TABLES modules: " msgstr "$IP6TABLES মডিউল আনলোড করা হচ্ছে: " #: /etc/rc.d/init.d/firstboot:49 msgid "X is now configured. Starting Setup Agent" msgstr "X কনফিগারেশন সম্পন্ন হয়েছে। Setup Agent আরম্ভ করা হচ্ছে" #: /etc/sysconfig/network-scripts/network-functions-ipv6:539 msgid "Device '$device' enabling didn't work" msgstr "ডিভাইস '$device' সক্রিয় করা যায়নি" #: /etc/rc.d/init.d/functions:447 msgid "nN" msgstr "nN" #: /etc/rc.d/init.d/postgresql:161 msgid "You need to upgrade the data format before using PostgreSQL." msgstr "PostgreSQL ব্যবহারের পূর্বে ডাটা ফরম্যাট আপগ্রেড করা আবশ্যক।" #: /etc/rc.d/rc.sysinit:461 msgid "Remounting root filesystem in read-write mode: " msgstr "root ফাইল-সিস্টেমকে পড়া-লেখা(rw) মোডে পুনরায় মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/yum:57 msgid "Nightly yum update is enabled." msgstr "রাত্রিকালীন yum আপডেট প্রক্রিয়া সক্রিয় করা আছে।" #: /etc/rc.d/init.d/halt:120 msgid "Syncing hardware clock to system time" msgstr "হার্ডওয়্যারের ঘড়িকে সিস্টেমের সময়ের সাথে সমঞ্জস করা হচ্ছে" #: /etc/rc.d/init.d/sshd:94 msgid "Configuration file or keys are invalid" msgstr "কনফিগারেশন ফাইল অথবা কী (key) বৈধ নয়" #: /etc/sysconfig/network-scripts/network-functions-ipv6:112 msgid "DEBUG " msgstr "ডিবাগ " #: /etc/rc.d/init.d/netfs:164 /etc/rc.d/init.d/network:304 msgid "Usage: $0 {start|stop|restart|reload|status}" msgstr "ব্যবহারপদ্ধতি: $0 {start|stop|restart|reload|status}" #: /etc/sysconfig/network-scripts/network-functions-ipv6:738 msgid "Part $c of given IPv4 address '$testipv4addr_valid' is out of range" msgstr "প্রদত্ত IPv4 ঠিকানা '$testipv4addr_valid'-র $c অংশটি বৈধ সীমা উল্লঙ্ঘন করেছে" #: /etc/rc.d/init.d/portmap:29 msgid "Networking not configured - exiting" msgstr "নেটওয়র্কব্যবস্থা কনফিগার করা হয়নি - প্রস্থান করা হচ্ছে" #: /etc/rc.d/init.d/acpid:26 msgid "Starting acpi daemon: " msgstr "acpi ডেমন আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/netfs:40 msgid "Mounting SMB filesystems: " msgstr "SMB ফাইল-সিস্টেম মাউন্ট করা হচ্ছে: " #: /etc/rc.d/init.d/iiim:20 msgid "Starting IIIMF input server: " msgstr "IIIMF ইনপুট সার্ভার আরম্ভ করা হচ্ছে: " #: /etc/sysconfig/network-scripts/network-functions-ipv6:308 #: /etc/sysconfig/network-scripts/network-functions-ipv6:363 msgid "Missing parameter 'IPv6-network' (arg 1)" msgstr "অনুপস্থিত পরামিতি 'IPv6-network' (arg 1)" #: /etc/rc.d/init.d/ip6tables:251 /etc/rc.d/init.d/iptables:251 msgid "Firewall is stopped." msgstr "ফায়ারওয়াল বন্ধ করা আছে।" #: /etc/rc.d/rc.sysinit:397 /etc/rc.d/rc.sysinit:422 msgid "Automatic reboot in progress." msgstr "স্বয়ংক্রিয় রিবুট প্রক্রিয়া চলছে।" #: /etc/rc.d/init.d/functions:414 msgid "$STRING" msgstr "$STRING" #: /etc/rc.d/init.d/sendmail:94 msgid "reloading sm-client: " msgstr "sm-client পুনরায় লোড করা হচ্ছে: " #: /etc/sysconfig/network-scripts/ifup-sl:54 msgid "dip started for $DEVICE on $MODEMPORT at $LINESPEED" msgstr "$MODEMPORT-র উপর $LINESPEED-এ $DEVICE-র জন্য dip আরম্ভ করা হয়েছে" #: /etc/rc.d/init.d/netfs:153 msgid "/proc filesystem unavailable" msgstr "/proc ফাইল-সিস্টেমটি উপলব্ধ নয়" #: /etc/rc.d/init.d/nfs:87 msgid "Starting NFS mountd: " msgstr "NFS mountd আরম্ভ করা হচ্ছে: " #: /etc/rc.d/init.d/functions:293 msgid "${base} (pid $pid) is running..." msgstr "${base} (pid $pid) চলছে..." #: /etc/sysconfig/network-scripts/ifup-ppp:46 msgid "pppd does not exist or is not executable" msgstr "pppd বর্তমানে উপস্থিত নেই অথবা চালানো সম্ভব নয়" #: /etc/rc.d/init.d/ypbind:34 msgid "Binding to the NIS domain: " msgstr "NIS ডোমেইনের সাথে bind করা হচ্ছে: " #: /etc/rc.d/init.d/amd:39 /etc/rc.d/init.d/anacron:24 #: /etc/rc.d/init.d/arpwatch:35 /etc/rc.d/init.d/atd:39 #: /etc/rc.d/init.d/auditd:70 /etc/rc.d/init.d/bootparamd:38 #: /etc/rc.d/init.d/cpuspeed:43 /etc/rc.d/init.d/crond:42 #: /etc/rc.d/init.d/cups:71 /etc/rc.d/init.d/dc_client:41 #: /etc/rc.d/init.d/dc_server:37 /etc/rc.d/init.d/dovecot:27 #: /etc/rc.d/init.d/httpd:69 /etc/rc.d/init.d/irqbalance:56 #: /etc/rc.d/init.d/kadmin:51 /etc/rc.d/init.d/kprop:37 #: /etc/rc.d/init.d/krb524:41 /etc/rc.d/init.d/krb5kdc:41 #: /etc/rc.d/init.d/ldap:146 /etc/rc.d/init.d/ldap:153 #: /etc/rc.d/init.d/lisa:48 /etc/rc.d/init.d/lm_sensors:80 #: /etc/rc.d/init.d/mdmpd:57 /etc/rc.d/init.d/mysqld:106 #: /etc/rc.d/init.d/mysqld:108 /etc/rc.d/init.d/named:105 #: /etc/rc.d/init.d/nscd:58 /etc/rc.d/init.d/portmap:57 #: /etc/rc.d/init.d/radvd:45 /etc/rc.d/init.d/rarpd:32 #: /etc/rc.d/init.d/rwalld:33 /etc/rc.d/init.d/saslauthd:45 #: /etc/rc.d/init.d/snmpd:34 /etc/rc.d/init.d/snmptrapd:32 #: /etc/rc.d/init.d/squid:83 /etc/rc.d/init.d/sshd:115 /etc/rc.d/init.d/ups:67 #: /etc/rc.d/init.d/xinetd:68 msgid "Stopping $prog: " msgstr "$prog বন্ধ করা হচ্ছে: " ='n2841' href='#n2841'>2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* Obtain user_ids from usernames or vice versa. Returns false on
* success else the error string
*
* @param array &$user_id_ary The user ids to check or empty if usernames used
* @param array &$username_ary The usernames to check or empty if user ids used
* @param mixed $user_type Array of user types to check, false if not restricting by user type
*/
function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false)
{
	global $db;

	// Are both arrays already filled? Yep, return else
	// are neither array filled?
	if ($user_id_ary && $username_ary)
	{
		return false;
	}
	else if (!$user_id_ary && !$username_ary)
	{
		return 'NO_USERS';
	}

	$which_ary = ($user_id_ary) ? 'user_id_ary' : 'username_ary';

	if ($$which_ary && !is_array($$which_ary))
	{
		$$which_ary = array($$which_ary);
	}

	$sql_in = ($which_ary == 'user_id_ary') ? array_map('intval', $$which_ary) : array_map('utf8_clean_string', $$which_ary);
	unset($$which_ary);

	$user_id_ary = $username_ary = array();

	// Grab the user id/username records
	$sql_where = ($which_ary == 'user_id_ary') ? 'user_id' : 'username_clean';
	$sql = 'SELECT user_id, username
		FROM ' . USERS_TABLE . '
		WHERE ' . $db->sql_in_set($sql_where, $sql_in);

	if ($user_type !== false && !empty($user_type))
	{
		$sql .= ' AND ' . $db->sql_in_set('user_type', $user_type);
	}

	$result = $db->sql_query($sql);

	if (!($row = $db->sql_fetchrow($result)))
	{
		$db->sql_freeresult($result);
		return 'NO_USERS';
	}

	do
	{
		$username_ary[$row['user_id']] = $row['username'];
		$user_id_ary[] = $row['user_id'];
	}
	while ($row = $db->sql_fetchrow($result));
	$db->sql_freeresult($result);

	return false;
}

/**
* Get latest registered username and update database to reflect it
*/
function update_last_username()
{
	global $db;

	// Get latest username
	$sql = 'SELECT user_id, username, user_colour
		FROM ' . USERS_TABLE . '
		WHERE user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')
		ORDER BY user_id DESC';
	$result = $db->sql_query_limit($sql, 1);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if ($row)
	{
		set_config('newest_user_id', $row['user_id'], true);
		set_config('newest_username', $row['username'], true);
		set_config('newest_user_colour', $row['user_colour'], true);
	}
}

/**
* Updates a username across all relevant tables/fields
*
* @param string $old_name the old/current username
* @param string $new_name the new username
*/
function user_update_name($old_name, $new_name)
{
	global $config, $db, $cache, $phpbb_dispatcher;

	$update_ary = array(
		FORUMS_TABLE			=> array('forum_last_poster_name'),
		MODERATOR_CACHE_TABLE	=> array('username'),
		POSTS_TABLE				=> array('post_username'),
		TOPICS_TABLE			=> array('topic_first_poster_name', 'topic_last_poster_name'),
	);

	foreach ($update_ary as $table => $field_ary)
	{
		foreach ($field_ary as $field)
		{
			$sql = "UPDATE $table
				SET $field = '" . $db->sql_escape($new_name) . "'
				WHERE $field = '" . $db->sql_escape($old_name) . "'";
			$db->sql_query($sql);
		}
	}

	if ($config['newest_username'] == $old_name)
	{
		set_config('newest_username', $new_name, true);
	}

	/**
	* Update a username when it is changed
	*
	* @event core.update_username
	* @var	string	old_name	The old username that is replaced
	* @var	string	new_name	The new username
	* @since 3.1.0-a1
	*/
	$vars = array('old_name', 'new_name');
	extract($phpbb_dispatcher->trigger_event('core.update_username', compact($vars)));

	// Because some tables/caches use username-specific data we need to purge this here.
	$cache->destroy('sql', MODERATOR_CACHE_TABLE);
}

/**
* Adds an user
*
* @param mixed $user_row An array containing the following keys (and the appropriate values): username, group_id (the group to place the user in), user_email and the user_type(usually 0). Additional entries not overridden by defaults will be forwarded.
* @param string $cp_data custom profile fields, see custom_profile::build_insert_sql_array
* @return the new user's ID.
*/
function user_add($user_row, $cp_data = false)
{
	global $db, $user, $auth, $config, $phpbb_root_path, $phpEx;
	global $phpbb_dispatcher, $phpbb_container;

	if (empty($user_row['username']) || !isset($user_row['group_id']) || !isset($user_row['user_email']) || !isset($user_row['user_type']))
	{
		return false;
	}

	$username_clean = utf8_clean_string($user_row['username']);

	if (empty($username_clean))
	{
		return false;
	}

	$sql_ary = array(
		'username'			=> $user_row['username'],
		'username_clean'	=> $username_clean,
		'user_password'		=> (isset($user_row['user_password'])) ? $user_row['user_password'] : '',
		'user_email'		=> strtolower($user_row['user_email']),
		'user_email_hash'	=> phpbb_email_hash($user_row['user_email']),
		'group_id'			=> $user_row['group_id'],
		'user_type'			=> $user_row['user_type'],
	);

	// These are the additional vars able to be specified
	$additional_vars = array(
		'user_permissions'	=> '',
		'user_timezone'		=> $config['board_timezone'],
		'user_dateformat'	=> $config['default_dateformat'],
		'user_lang'			=> $config['default_lang'],
		'user_style'		=> (int) $config['default_style'],
		'user_actkey'		=> '',
		'user_ip'			=> '',
		'user_regdate'		=> time(),
		'user_passchg'		=> time(),
		'user_options'		=> 230271,
		// We do not set the new flag here - registration scripts need to specify it
		'user_new'			=> 0,

		'user_inactive_reason'	=> 0,
		'user_inactive_time'	=> 0,
		'user_lastmark'			=> time(),
		'user_lastvisit'		=> 0,
		'user_lastpost_time'	=> 0,
		'user_lastpage'			=> '',
		'user_posts'			=> 0,
		'user_colour'			=> '',
		'user_avatar'			=> '',
		'user_avatar_type'		=> '',
		'user_avatar_width'		=> 0,
		'user_avatar_height'	=> 0,
		'user_new_privmsg'		=> 0,
		'user_unread_privmsg'	=> 0,
		'user_last_privmsg'		=> 0,
		'user_message_rules'	=> 0,
		'user_full_folder'		=> PRIVMSGS_NO_BOX,
		'user_emailtime'		=> 0,

		'user_notify'			=> 0,
		'user_notify_pm'		=> 1,
		'user_notify_type'		=> NOTIFY_EMAIL,
		'user_allow_pm'			=> 1,
		'user_allow_viewonline'	=> 1,
		'user_allow_viewemail'	=> 1,
		'user_allow_massemail'	=> 1,

		'user_sig'					=> '',
		'user_sig_bbcode_uid'		=> '',
		'user_sig_bbcode_bitfield'	=> '',

		'user_form_salt'			=> unique_id(),
	);

	// Now fill the sql array with not required variables
	foreach ($additional_vars as $key => $default_value)
	{
		$sql_ary[$key] = (isset($user_row[$key])) ? $user_row[$key] : $default_value;
	}

	// Any additional variables in $user_row not covered above?
	$remaining_vars = array_diff(array_keys($user_row), array_keys($sql_ary));

	// Now fill our sql array with the remaining vars
	if (sizeof($remaining_vars))
	{
		foreach ($remaining_vars as $key)
		{
			$sql_ary[$key] = $user_row[$key];
		}
	}

	/**
	* Use this event to modify the values to be inserted when a user is added
	*
	* @event core.user_add_modify_data
	* @var array	user_row		Array of user details submited to user_add
	* @var array	cp_data			Array of Custom profile fields submited to user_add
	* @var array	sql_ary		Array of data to be inserted when a user is added
	* @since 3.1.0-a1
	* @change 3.1.0-b5
	*/
	$vars = array('user_row', 'cp_data', 'sql_ary');
	extract($phpbb_dispatcher->trigger_event('core.user_add_modify_data', compact($vars)));

	$sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
	$db->sql_query($sql);

	$user_id = $db->sql_nextid();

	// Insert Custom Profile Fields
	if ($cp_data !== false && sizeof($cp_data))
	{
		$cp_data['user_id'] = (int) $user_id;

		$cp = $phpbb_container->get('profilefields.manager');
		$sql = 'INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' ' .
			$db->sql_build_array('INSERT', $cp->build_insert_sql_array($cp_data));
		$db->sql_query($sql);
	}

	// Place into appropriate group...
	$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' ' . $db->sql_build_array('INSERT', array(
		'user_id'		=> (int) $user_id,
		'group_id'		=> (int) $user_row['group_id'],
		'user_pending'	=> 0)
	);
	$db->sql_query($sql);

	// Now make it the users default group...
	group_set_user_default($user_row['group_id'], array($user_id), false);

	// Add to newly registered users group if user_new is 1
	if ($config['new_member_post_limit'] && $sql_ary['user_new'])
	{
		$sql = 'SELECT group_id
			FROM ' . GROUPS_TABLE . "
			WHERE group_name = 'NEWLY_REGISTERED'
				AND group_type = " . GROUP_SPECIAL;
		$result = $db->sql_query($sql);
		$add_group_id = (int) $db->sql_fetchfield('group_id');
		$db->sql_freeresult($result);

		if ($add_group_id)
		{
			global $phpbb_log;

			// Because these actions only fill the log unneccessarily we skip the add_log() entry.
			$phpbb_log->disable('admin');

			// Add user to "newly registered users" group and set to default group if admin specified so.
			if ($config['new_member_group_default'])
			{
				group_user_add($add_group_id, $user_id, false, false, true);
				$user_row['group_id'] = $add_group_id;
			}
			else
			{
				group_user_add($add_group_id, $user_id);
			}

			$phpbb_log->enable('admin');
		}
	}

	// set the newest user and adjust the user count if the user is a normal user and no activation mail is sent
	if ($user_row['user_type'] == USER_NORMAL || $user_row['user_type'] == USER_FOUNDER)
	{
		set_config('newest_user_id', $user_id, true);
		set_config('newest_username', $user_row['username'], true);
		set_config_count('num_users', 1, true);

		$sql = 'SELECT group_colour
			FROM ' . GROUPS_TABLE . '
			WHERE group_id = ' . (int) $user_row['group_id'];
		$result = $db->sql_query_limit($sql, 1);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		set_config('newest_user_colour', $row['group_colour'], true);
	}

	/**
	* Event that returns user id, user detals and user CPF of newly registared user
	*
	* @event core.user_add_after
	* @var int		user_id			User id of newly registared user
	* @var array	user_row		Array of user details submited to user_add
	* @var array	cp_data			Array of Custom profile fields submited to user_add
	* @since 3.1.0-b5
	*/
	$vars = array('user_id', 'user_row', 'cp_data');
	extract($phpbb_dispatcher->trigger_event('core.user_add_after', compact($vars)));

	return $user_id;
}

/**
* Remove User
* @param $mode Either 'retain' or 'remove'
*/
function user_delete($mode, $user_ids, $retain_username = true)
{
	global $cache, $config, $db, $user, $auth, $phpbb_dispatcher;
	global $phpbb_root_path, $phpEx;

	$db->sql_transaction('begin');

	$user_rows = array();
	if (!is_array($user_ids))
	{
		$user_ids = array($user_ids);
	}

	$user_id_sql = $db->sql_in_set('user_id', $user_ids);

	$sql = 'SELECT *
		FROM ' . USERS_TABLE . '
		WHERE ' . $user_id_sql;
	$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
		$user_rows[(int) $row['user_id']] = $row;
	}
	$db->sql_freeresult($result);

	if (empty($user_rows))
	{
		return false;
	}

	/**
	* Event before a user is deleted
	*
	* @event core.delete_user_before
	* @var	string	mode		Mode of deletion (retain/delete posts)
	* @var	array	user_ids	IDs of the deleted user
	* @var	mixed	retain_username	True if username should be retained
	*				or false if not
	* @since 3.1.0-a1
	*/
	$vars = array('mode', 'user_ids', 'retain_username');
	extract($phpbb_dispatcher->trigger_event('core.delete_user_before', compact($vars)));

	// Before we begin, we will remove the reports the user issued.
	$sql = 'SELECT r.post_id, p.topic_id
		FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . ' p
		WHERE ' . $db->sql_in_set('r.user_id', $user_ids) . '
			AND p.post_id = r.post_id';
	$result = $db->sql_query($sql);

	$report_posts = $report_topics = array();
	while ($row = $db->sql_fetchrow($result))
	{
		$report_posts[] = $row['post_id'];
		$report_topics[] = $row['topic_id'];
	}
	$db->sql_freeresult($result);

	if (sizeof($report_posts))
	{
		$report_posts = array_unique($report_posts);
		$report_topics = array_unique($report_topics);

		// Get a list of topics that still contain reported posts
		$sql = 'SELECT DISTINCT topic_id
			FROM ' . POSTS_TABLE . '
			WHERE ' . $db->sql_in_set('topic_id', $report_topics) . '
				AND post_reported = 1
				AND ' . $db->sql_in_set('post_id', $report_posts, true);
		$result = $db->sql_query($sql);

		$keep_report_topics = array();
		while ($row = $db->sql_fetchrow($result))
		{
			$keep_report_topics[] = $row['topic_id'];
		}
		$db->sql_freeresult($result);

		if (sizeof($keep_report_topics))
		{
			$report_topics = array_diff($report_topics, $keep_report_topics);
		}
		unset($keep_report_topics);

		// Now set the flags back
		$sql = 'UPDATE ' . POSTS_TABLE . '
			SET post_reported = 0
			WHERE ' . $db->sql_in_set('post_id', $report_posts);
		$db->sql_query($sql);

		if (sizeof($report_topics))
		{
			$sql = 'UPDATE ' . TOPICS_TABLE . '
				SET topic_reported = 0
				WHERE ' . $db->sql_in_set('topic_id', $report_topics);
			$db->sql_query($sql);
		}
	}

	// Remove reports
	$db->sql_query('DELETE FROM ' . REPORTS_TABLE . ' WHERE ' . $user_id_sql);

	$num_users_delta = 0;

	// Some things need to be done in the loop (if the query changes based
	// on which user is currently being deleted)
	$added_guest_posts = 0;
	foreach ($user_rows as $user_id => $user_row)
	{
		if ($user_row['user_avatar'] && $user_row['user_avatar_type'] == 'avatar.driver.upload')
		{
			avatar_delete('user', $user_row);
		}

		// Decrement number of users if this user is active
		if ($user_row['user_type'] != USER_INACTIVE && $user_row['user_type'] != USER_IGNORE)
		{
			--$num_users_delta;
		}

		switch ($mode)
		{
			case 'retain':
				if ($retain_username === false)
				{
					$post_username = $user->lang['GUEST'];
				}
				else
				{
					$post_username = $user_row['username'];
				}

				// If the user is inactive and newly registered
				// we assume no posts from the user, and save
				// the queries
				if ($user_row['user_type'] != USER_INACTIVE || $user_row['user_inactive_reason'] != INACTIVE_REGISTER || $user_row['user_posts'])
				{
					// When we delete these users and retain the posts, we must assign all the data to the guest user
					$sql = 'UPDATE ' . FORUMS_TABLE . '
						SET forum_last_poster_id = ' . ANONYMOUS . ", forum_last_poster_name = '" . $db->sql_escape($post_username) . "', forum_last_poster_colour = ''
						WHERE forum_last_poster_id = $user_id";
					$db->sql_query($sql);

					$sql = 'UPDATE ' . POSTS_TABLE . '
						SET poster_id = ' . ANONYMOUS . ", post_username = '" . $db->sql_escape($post_username) . "'
						WHERE poster_id = $user_id";
					$db->sql_query($sql);

					$sql = 'UPDATE ' . TOPICS_TABLE . '
						SET topic_poster = ' . ANONYMOUS . ", topic_first_poster_name = '" . $db->sql_escape($post_username) . "', topic_first_poster_colour = ''
						WHERE topic_poster = $user_id";
					$db->sql_query($sql);

					$sql = 'UPDATE ' . TOPICS_TABLE . '
						SET topic_last_poster_id = ' . ANONYMOUS . ", topic_last_poster_name = '" . $db->sql_escape($post_username) . "', topic_last_poster_colour = ''
						WHERE topic_last_poster_id = $user_id";
					$db->sql_query($sql);

					// Since we change every post by this author, we need to count this amount towards the anonymous user

					if ($user_row['user_posts'])
					{
						$added_guest_posts += $user_row['user_posts'];
					}
				}
			break;

			case 'remove':
				// there is nothing variant specific to deleting posts
			break;
		}
	}

	if ($num_users_delta != 0)
	{
		set_config_count('num_users', $num_users_delta, true);
	}

	// Now do the invariant tasks
	// all queries performed in one call of this function are in a single transaction
	// so this is kosher
	if ($mode == 'retain')
	{
		// Assign more data to the Anonymous user
		$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
			SET poster_id = ' . ANONYMOUS . '
			WHERE ' . $db->sql_in_set('poster_id', $user_ids);
		$db->sql_query($sql);

		$sql = 'UPDATE ' . POSTS_TABLE . '
			SET post_edit_user = ' . ANONYMOUS . '
			WHERE ' . $db->sql_in_set('post_edit_user', $user_ids);
		$db->sql_query($sql);

		$sql = 'UPDATE ' . USERS_TABLE . '
			SET user_posts = user_posts + ' . $added_guest_posts . '
			WHERE user_id = ' . ANONYMOUS;
		$db->sql_query($sql);
	}
	else if ($mode == 'remove')
	{
		if (!function_exists('delete_posts'))
		{
			include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
		}

		// Delete posts, attachments, etc.
		// delete_posts can handle any number of IDs in its second argument
		delete_posts('poster_id', $user_ids);
	}

	$table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, TOPICS_POSTED_TABLE, FORUMS_TRACK_TABLE, PROFILE_FIELDS_DATA_TABLE, MODERATOR_CACHE_TABLE, DRAFTS_TABLE, BOOKMARKS_TABLE, SESSIONS_KEYS_TABLE, PRIVMSGS_FOLDER_TABLE, PRIVMSGS_RULES_TABLE);

	// Delete the miscellaneous (non-post) data for the user
	foreach ($table_ary as $table)
	{
		$sql = "DELETE FROM $table
			WHERE " . $user_id_sql;
		$db->sql_query($sql);
	}

	$cache->destroy('sql', MODERATOR_CACHE_TABLE);

	// Delete user log entries about this user
	$sql = 'DELETE FROM ' . LOG_TABLE . '
		WHERE ' . $db->sql_in_set('reportee_id', $user_ids);
	$db->sql_query($sql);

	// Change user_id to anonymous for this users triggered events
	$sql = 'UPDATE ' . LOG_TABLE . '
		SET user_id = ' . ANONYMOUS . '
		WHERE ' . $user_id_sql;
	$db->sql_query($sql);

	// Delete the user_id from the zebra table
	$sql = 'DELETE FROM ' . ZEBRA_TABLE . '
		WHERE ' . $user_id_sql . '
			OR ' . $db->sql_in_set('zebra_id', $user_ids);
	$db->sql_query($sql);

	// Delete the user_id from the banlist
	$sql = 'DELETE FROM ' . BANLIST_TABLE . '
		WHERE ' . $db->sql_in_set('ban_userid', $user_ids);
	$db->sql_query($sql);

	// Delete the user_id from the session table
	$sql = 'DELETE FROM ' . SESSIONS_TABLE . '
		WHERE ' . $db->sql_in_set('session_user_id', $user_ids);
	$db->sql_query($sql);

	// Clean the private messages tables from the user
	if (!function_exists('phpbb_delete_user_pms'))
	{
		include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
	}
	phpbb_delete_users_pms($user_ids);

	$db->sql_transaction('commit');

	/**
	* Event after a user is deleted
	*
	* @event core.delete_user_after
	* @var	string	mode		Mode of deletion (retain/delete posts)
	* @var	array	user_ids	IDs of the deleted user
	* @var	mixed	retain_username	True if username should be retained
	*				or false if not
	* @since 3.1.0-a1
	*/
	$vars = array('mode', 'user_ids', 'retain_username');
	extract($phpbb_dispatcher->trigger_event('core.delete_user_after', compact($vars)));

	// Reset newest user info if appropriate
	if (in_array($config['newest_user_id'], $user_ids))
	{
		update_last_username();
	}

	return false;
}

/**
* Flips user_type from active to inactive and vice versa, handles group membership updates
*
* @param string $mode can be flip for flipping from active/inactive, activate or deactivate
*/
function user_active_flip($mode, $user_id_ary, $reason = INACTIVE_MANUAL)
{
	global $config, $db, $user, $auth;

	$deactivated = $activated = 0;
	$sql_statements = array();

	if (!is_array($user_id_ary))
	{
		$user_id_ary = array($user_id_ary);
	}

	if (!sizeof($user_id_ary))
	{
		return;
	}

	$sql = 'SELECT user_id, group_id, user_type, user_inactive_reason
		FROM ' . USERS_TABLE . '
		WHERE ' . $db->sql_in_set('user_id', $user_id_ary);
	$result = $db->sql_query($sql);

	while ($row = $db->sql_fetchrow($result))
	{
		$sql_ary = array();

		if ($row['user_type'] == USER_IGNORE || $row['user_type'] == USER_FOUNDER ||
			($mode == 'activate' && $row['user_type'] != USER_INACTIVE) ||
			($mode == 'deactivate' && $row['user_type'] == USER_INACTIVE))
		{
			continue;
		}

		if ($row['user_type'] == USER_INACTIVE)
		{
			$activated++;
		}
		else
		{
			$deactivated++;

			// Remove the users session key...
			$user->reset_login_keys($row['user_id']);
		}

		$sql_ary += array(
			'user_type'				=> ($row['user_type'] == USER_NORMAL) ? USER_INACTIVE : USER_NORMAL,
			'user_inactive_time'	=> ($row['user_type'] == USER_NORMAL) ? time() : 0,
			'user_inactive_reason'	=> ($row['user_type'] == USER_NORMAL) ? $reason : 0,
		);

		$sql_statements[$row['user_id']] = $sql_ary;
	}
	$db->sql_freeresult($result);

	if (sizeof($sql_statements))
	{
		foreach ($sql_statements as $user_id => $sql_ary)
		{
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
				WHERE user_id = ' . $user_id;
			$db->sql_query($sql);
		}

		$auth->acl_clear_prefetch(array_keys($sql_statements));
	}

	if ($deactivated)
	{
		set_config_count('num_users', $deactivated * (-1), true);
	}

	if ($activated)
	{
		set_config_count('num_users', $activated, true);
	}

	// Update latest username
	update_last_username();
}

/**
* Add a ban or ban exclusion to the banlist. Bans either a user, an IP or an email address
*
* @param string $mode Type of ban. One of the following: user, ip, email
* @param mixed $ban Banned entity. Either string or array with usernames, ips or email addresses
* @param int $ban_len Ban length in minutes
* @param string $ban_len_other Ban length as a date (YYYY-MM-DD)
* @param boolean $ban_exclude Exclude these entities from banning?
* @param string $ban_reason String describing the reason for this ban
* @return boolean
*/
function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reason, $ban_give_reason = '')
{
	global $db, $user, $auth, $cache;

	// Delete stale bans
	$sql = 'DELETE FROM ' . BANLIST_TABLE . '
		WHERE ban_end < ' . time() . '
			AND ban_end <> 0';
	$db->sql_query($sql);

	$ban_list = (!is_array($ban)) ? array_unique(explode("\n", $ban)) : $ban;
	$ban_list_log = implode(', ', $ban_list);

	$current_time = time();

	// Set $ban_end to the unix time when the ban should end. 0 is a permanent ban.
	if ($ban_len)
	{
		if ($ban_len != -1 || !$ban_len_other)
		{
			$ban_end = max($current_time, $current_time + ($ban_len) * 60);
		}
		else
		{
			$ban_other = explode('-', $ban_len_other);
			if (sizeof($ban_other) == 3 && ((int) $ban_other[0] < 9999) &&
				(strlen($ban_other[0]) == 4) && (strlen($ban_other[1]) == 2) && (strlen($ban_other[2]) == 2))
			{
				$ban_end = max($current_time, $user->create_datetime()
					->setDate((int) $ban_other[0], (int) $ban_other[1], (int) $ban_other[2])
					->setTime(0, 0, 0)
					->getTimestamp() + $user->timezone->getOffset(new DateTime('UTC')));
			}
			else
			{
				trigger_error('LENGTH_BAN_INVALID', E_USER_WARNING);
			}
		}
	}
	else
	{
		$ban_end = 0;
	}

	$founder = $founder_names = array();

	if (!$ban_exclude)
	{
		// Create a list of founder...
		$sql = 'SELECT user_id, user_email, username_clean
			FROM ' . USERS_TABLE . '
			WHERE user_type = ' . USER_FOUNDER;
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$founder[$row['user_id']] = $row['user_email'];
			$founder_names[$row['user_id']] = $row['username_clean'];
		}
		$db->sql_freeresult($result);
	}

	$banlist_ary = array();

	switch ($mode)
	{
		case 'user':
			$type = 'ban_userid';

			// At the moment we do not support wildcard username banning

			// Select the relevant user_ids.
			$sql_usernames = array();

			foreach ($ban_list as $username)
			{
				$username = trim($username);
				if ($username != '')
				{
					$clean_name = utf8_clean_string($username);
					if ($clean_name == $user->data['username_clean'])
					{
						trigger_error('CANNOT_BAN_YOURSELF', E_USER_WARNING);
					}
					if (in_array($clean_name, $founder_names))
					{
						trigger_error('CANNOT_BAN_FOUNDER', E_USER_WARNING);
					}
					$sql_usernames[] = $clean_name;
				}
			}

			// Make sure we have been given someone to ban
			if (!sizeof($sql_usernames))
			{
				trigger_error('NO_USER_SPECIFIED', E_USER_WARNING);
			}

			$sql = 'SELECT user_id
				FROM ' . USERS_TABLE . '
				WHERE ' . $db->sql_in_set('username_clean', $sql_usernames);

			// Do not allow banning yourself, the guest account, or founders.
			$non_bannable = array($user->data['user_id'], ANONYMOUS);
			if (sizeof($founder))
			{
				$sql .= ' AND ' . $db->sql_in_set('user_id', array_merge(array_keys($founder), $non_bannable), true);
			}
			else
			{
				$sql .= ' AND ' . $db->sql_in_set('user_id', $non_bannable, true);
			}

			$result = $db->sql_query($sql);

			if ($row = $db->sql_fetchrow($result))
			{
				do
				{
					$banlist_ary[] = (int) $row['user_id'];
				}
				while ($row = $db->sql_fetchrow($result));
			}
			else
			{
				$db->sql_freeresult($result);
				trigger_error('NO_USERS', E_USER_WARNING);
			}
			$db->sql_freeresult($result);
		break;

		case 'ip':
			$type = 'ban_ip';

			foreach ($ban_list as $ban_item)
			{
				if (preg_match('#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})[ ]*\-[ ]*([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#', trim($ban_item), $ip_range_explode))
				{
					// This is an IP range
					// Don't ask about all this, just don't ask ... !
					$ip_1_counter = $ip_range_explode[1];
					$ip_1_end = $ip_range_explode[5];

					while ($ip_1_counter <= $ip_1_end)
					{
						$ip_2_counter = ($ip_1_counter == $ip_range_explode[1]) ? $ip_range_explode[2] : 0;
						$ip_2_end = ($ip_1_counter < $ip_1_end) ? 254 : $ip_range_explode[6];

						if ($ip_2_counter == 0 && $ip_2_end == 254)
						{
							$ip_2_counter = 256;
							$ip_2_fragment = 256;

							$banlist_ary[] = "$ip_1_counter.*";
						}

						while ($ip_2_counter <= $ip_2_end)
						{
							$ip_3_counter = ($ip_2_counter == $ip_range_explode[2] && $ip_1_counter == $ip_range_explode[1]) ? $ip_range_explode[3] : 0;
							$ip_3_end = ($ip_2_counter < $ip_2_end || $ip_1_counter < $ip_1_end) ? 254 : $ip_range_explode[7];

							if ($ip_3_counter == 0 && $ip_3_end == 254)
							{
								$ip_3_counter = 256;
								$ip_3_fragment = 256;

								$banlist_ary[] = "$ip_1_counter.$ip_2_counter.*";
							}

							while ($ip_3_counter <= $ip_3_end)
							{
								$ip_4_counter = ($ip_3_counter == $ip_range_explode[3] && $ip_2_counter == $ip_range_explode[2] && $ip_1_counter == $ip_range_explode[1]) ? $ip_range_explode[4] : 0;
								$ip_4_end = ($ip_3_counter < $ip_3_end || $ip_2_counter < $ip_2_end) ? 254 : $ip_range_explode[8];

								if ($ip_4_counter == 0 && $ip_4_end == 254)
								{
									$ip_4_counter = 256;
									$ip_4_fragment = 256;

									$banlist_ary[] = "$ip_1_counter.$ip_2_counter.$ip_3_counter.*";
								}

								while ($ip_4_counter <= $ip_4_end)
								{
									$banlist_ary[] = "$ip_1_counter.$ip_2_counter.$ip_3_counter.$ip_4_counter";
									$ip_4_counter++;
								}
								$ip_3_counter++;
							}
							$ip_2_counter++;
						}
						$ip_1_counter++;
					}
				}
				else if (preg_match('#^([0-9]{1,3})\.([0-9\*]{1,3})\.([0-9\*]{1,3})\.([0-9\*]{1,3})$#', trim($ban_item)) || preg_match('#^[a-f0-9:]+\*?$#i', trim($ban_item)))
				{
					// Normal IP address
					$banlist_ary[] = trim($ban_item);
				}
				else if (preg_match('#^\*$#', trim($ban_item)))
				{
					// Ban all IPs
					$banlist_ary[] = '*';
				}
				else if (preg_match('#^([\w\-_]\.?){2,}$#is', trim($ban_item)))
				{
					// hostname
					$ip_ary = gethostbynamel(trim($ban_item));

					if (!empty($ip_ary))
					{
						foreach ($ip_ary as $ip)
						{
							if ($ip)
							{
								if (strlen($ip) > 40)
								{
									continue;
								}

								$banlist_ary[] = $ip;
							}
						}
					}
				}

				if (empty($banlist_ary))
				{
					trigger_error('NO_IPS_DEFINED', E_USER_WARNING);
				}
			}
		break;

		case 'email':
			$type = 'ban_email';

			foreach ($ban_list as $ban_item)
			{
				$ban_item = trim($ban_item);

				if (preg_match('#^.*?@*|(([a-z0-9\-]+\.)+([a-z]{2,3}))$#i', $ban_item))
				{
					if (strlen($ban_item) > 100)
					{
						continue;
					}

					if (!sizeof($founder) || !in_array($ban_item, $founder))
					{
						$banlist_ary[] = $ban_item;
					}
				}
			}

			if (sizeof($ban_list) == 0)
			{
				trigger_error('NO_EMAILS_DEFINED', E_USER_WARNING);
			}
		break;

		default:
			trigger_error('NO_MODE', E_USER_WARNING);
		break;
	}

	// Fetch currently set bans of the specified type and exclude state. Prevent duplicate bans.
	$sql_where = ($type == 'ban_userid') ? 'ban_userid <> 0' : "$type <> ''";

	$sql = "SELECT $type
		FROM " . BANLIST_TABLE . "
		WHERE $sql_where
			AND ban_exclude = " . (int) $ban_exclude;
	$result = $db->sql_query($sql);

	// Reset $sql_where, because we use it later...
	$sql_where = '';

	if ($row = $db->sql_fetchrow($result))
	{
		$banlist_ary_tmp = array();
		do
		{
			switch ($mode)
			{
				case 'user':
					$banlist_ary_tmp[] = $row['ban_userid'];
				break;

				case 'ip':
					$banlist_ary_tmp[] = $row['ban_ip'];
				break;

				case 'email':
					$banlist_ary_tmp[] = $row['ban_email'];
				break;
			}
		}
		while ($row = $db->sql_fetchrow($result));

		$banlist_ary_tmp = array_intersect($banlist_ary, $banlist_ary_tmp);

		if (sizeof($banlist_ary_tmp))
		{
			// One or more entities are already banned/excluded, delete the existing bans, so they can be re-inserted with the given new length
			$sql = 'DELETE FROM ' . BANLIST_TABLE . '
				WHERE ' . $db->sql_in_set($type, $banlist_ary_tmp) . '
					AND ban_exclude = ' . (int) $ban_exclude;
			$db->sql_query($sql);
		}

		unset($banlist_ary_tmp);
	}
	$db->sql_freeresult($result);

	// We have some entities to ban
	if (sizeof($banlist_ary))
	{
		$sql_ary = array();

		foreach ($banlist_ary as $ban_entry)
		{
			$sql_ary[] = array(
				$type				=> $ban_entry,
				'ban_start'			=> (int) $current_time,
				'ban_end'			=> (int) $ban_end,
				'ban_exclude'		=> (int) $ban_exclude,
				'ban_reason'		=> (string) $ban_reason,
				'ban_give_reason'	=> (string) $ban_give_reason,
			);
		}

		$db->sql_multi_insert(BANLIST_TABLE, $sql_ary);

		// If we are banning we want to logout anyone matching the ban
		if (!$ban_exclude)
		{
			switch ($mode)
			{
				case 'user':
					$sql_where = 'WHERE ' . $db->sql_in_set('session_user_id', $banlist_ary);
				break;

				case 'ip':
					$sql_where = 'WHERE ' . $db->sql_in_set('session_ip', $banlist_ary);
				break;

				case 'email':
					$banlist_ary_sql = array();

					foreach ($banlist_ary as $ban_entry)
					{
						$banlist_ary_sql[] = (string) str_replace('*', '%', $ban_entry);
					}

					$sql = 'SELECT user_id
						FROM ' . USERS_TABLE . '
						WHERE ' . $db->sql_in_set('user_email', $banlist_ary_sql);
					$result = $db->sql_query($sql);

					$sql_in = array();

					if ($row = $db->sql_fetchrow($result))
					{
						do
						{
							$sql_in[] = $row['user_id'];
						}
						while ($row = $db->sql_fetchrow($result));

						$sql_where = 'WHERE ' . $db->sql_in_set('session_user_id', $sql_in);
					}
					$db->sql_freeresult($result);
				break;
			}

			if (isset($sql_where) && $sql_where)
			{
				$sql = 'DELETE FROM ' . SESSIONS_TABLE . "
					$sql_where";
				$db->sql_query($sql);

				if ($mode == 'user')
				{
					$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . ' ' . ((in_array('*', $banlist_ary)) ? '' : 'WHERE ' . $db->sql_in_set('user_id', $banlist_ary));
					$db->sql_query($sql);
				}
			}
		}

		// Update log
		$log_entry = ($ban_exclude) ? 'LOG_BAN_EXCLUDE_' : 'LOG_BAN_';

		// Add to moderator log, admin log and user notes
		add_log('admin', $log_entry . strtoupper($mode), $ban_reason, $ban_list_log);
		add_log('mod', 0, 0, $log_entry . strtoupper($mode), $ban_reason, $ban_list_log);
		if ($mode == 'user')
		{
			foreach ($banlist_ary as $user_id)
			{
				add_log('user', $user_id, $log_entry . strtoupper($mode), $ban_reason, $ban_list_log);
			}
		}

		$cache->destroy('sql', BANLIST_TABLE);

		return true;
	}

	// There was nothing to ban/exclude. But destroying the cache because of the removal of stale bans.
	$cache->destroy('sql', BANLIST_TABLE);

	return false;
}

/**
* Unban User
*/
function user_unban($mode, $ban)
{
	global $db, $user, $auth, $cache;

	// Delete stale bans
	$sql = 'DELETE FROM ' . BANLIST_TABLE . '
		WHERE ban_end < ' . time() . '
			AND ban_end <> 0';
	$db->sql_query($sql);

	if (!is_array($ban))
	{
		$ban = array($ban);
	}

	$unban_sql = array_map('intval', $ban);

	if (sizeof($unban_sql))
	{
		// Grab details of bans for logging information later
		switch ($mode)
		{
			case 'user':
				$sql = 'SELECT u.username AS unban_info, u.user_id
					FROM ' . USERS_TABLE . ' u, ' . BANLIST_TABLE . ' b
					WHERE ' . $db->sql_in_set('b.ban_id', $unban_sql) . '
						AND u.user_id = b.ban_userid';
			break;

			case 'email':
				$sql = 'SELECT ban_email AS unban_info
					FROM ' . BANLIST_TABLE . '
					WHERE ' . $db->sql_in_set('ban_id', $unban_sql);
			break;

			case 'ip':
				$sql = 'SELECT ban_ip AS unban_info
					FROM ' . BANLIST_TABLE . '
					WHERE ' . $db->sql_in_set('ban_id', $unban_sql);
			break;
		}
		$result = $db->sql_query($sql);

		$l_unban_list = '';
		$user_ids_ary = array();
		while ($row = $db->sql_fetchrow($result))
		{
			$l_unban_list .= (($l_unban_list != '') ? ', ' : '') . $row['unban_info'];
			if ($mode == 'user')
			{
				$user_ids_ary[] = $row['user_id'];
			}
		}
		$db->sql_freeresult($result);

		$sql = 'DELETE FROM ' . BANLIST_TABLE . '
			WHERE ' . $db->sql_in_set('ban_id', $unban_sql);
		$db->sql_query($sql);

		// Add to moderator log, admin log and user notes
		add_log('admin', 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
		add_log('mod', 0, 0, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
		if ($mode == 'user')
		{
			foreach ($user_ids_ary as $user_id)
			{
				add_log('user', $user_id, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
			}
		}
	}

	$cache->destroy('sql', BANLIST_TABLE);

	return false;
}

/**
* Internet Protocol Address Whois
* RFC3912: WHOIS Protocol Specification
*
* @param string $ip		Ip address, either IPv4 or IPv6.
*
* @return string		Empty string if not a valid ip address.
*						Otherwise make_clickable()'ed whois result.
*/
function user_ipwhois($ip)
{
	if (empty($ip))
	{
		return '';
	}

	if (preg_match(get_preg_expression('ipv4'), $ip))
	{
		// IPv4 address
		$whois_host = 'whois.arin.net.';
	}
	else if (preg_match(get_preg_expression('ipv6'), $ip))
	{
		// IPv6 address
		$whois_host = 'whois.sixxs.net.';
	}
	else
	{
		return '';
	}

	$ipwhois = '';

	if (($fsk = @fsockopen($whois_host, 43)))
	{
		// CRLF as per RFC3912
		fputs($fsk, "$ip\r\n");
		while (!feof($fsk))
		{
			$ipwhois .= fgets($fsk, 1024);
		}
		@fclose($fsk);
	}

	$match = array();

	// Test for referrals from $whois_host to other whois databases, roll on rwhois
	if (preg_match('#ReferralServer: whois://(.+)#im', $ipwhois, $match))
	{
		if (strpos($match[1], ':') !== false)
		{
			$pos	= strrpos($match[1], ':');
			$server	= substr($match[1], 0, $pos);
			$port	= (int) substr($match[1], $pos + 1);
			unset($pos);
		}
		else
		{
			$server	= $match[1];
			$port	= 43;
		}

		$buffer = '';

		if (($fsk = @fsockopen($server, $port)))
		{
			fputs($fsk, "$ip\r\n");
			while (!feof($fsk))
			{
				$buffer .= fgets($fsk, 1024);
			}
			@fclose($fsk);
		}

		// Use the result from $whois_host if we don't get any result here
		$ipwhois = (empty($buffer)) ? $ipwhois : $buffer;
	}

	$ipwhois = htmlspecialchars($ipwhois);

	// Magic URL ;)
	return trim(make_clickable($ipwhois, false, ''));
}

/**
* Data validation ... used primarily but not exclusively by ucp modules
*
* "Master" function for validating a range of data types
*/
function validate_data($data, $val_ary)
{
	global $user;

	$error = array();

	foreach ($val_ary as $var => $val_seq)
	{
		if (!is_array($val_seq[0]))
		{
			$val_seq = array($val_seq);
		}

		foreach ($val_seq as $validate)
		{
			$function = array_shift($validate);
			array_unshift($validate, $data[$var]);

			if (is_array($function))
			{
				$result = call_user_func_array(array($function[0], 'validate_' . $function[1]), $validate);
			}
			else
			{
				$function_prefix = (function_exists('phpbb_validate_' . $function)) ? 'phpbb_validate_' : 'validate_';
				$result = call_user_func_array($function_prefix . $function, $validate);
			}

			if ($result)
			{
				// Since errors are checked later for their language file existence, we need to make sure custom errors are not adjusted.
				$error[] = (empty($user->lang[$result . '_' . strtoupper($var)])) ? $result : $result . '_' . strtoupper($var);
			}
		}
	}

	return $error;
}

/**
* Validate String
*
* @return	boolean|string	Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_string($string, $optional = false, $min = 0, $max = 0)
{
	if (empty($string) && $optional)
	{
		return false;
	}

	if ($min && utf8_strlen(htmlspecialchars_decode($string)) < $min)
	{
		return 'TOO_SHORT';
	}
	else if ($max && utf8_strlen(htmlspecialchars_decode($string)) > $max)
	{
		return 'TOO_LONG';
	}

	return false;
}

/**
* Validate Number
*
* @return	boolean|string	Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_num($num, $optional = false, $min = 0, $max = 1E99)
{
	if (empty($num) && $optional)
	{
		return false;
	}

	if ($num < $min)
	{
		return 'TOO_SMALL';
	}
	else if ($num > $max)
	{
		return 'TOO_LARGE';
	}

	return false;
}

/**
* Validate Date
* @param String $string a date in the dd-mm-yyyy format
* @return	boolean
*/
function validate_date($date_string, $optional = false)
{
	$date = explode('-', $date_string);
	if ((empty($date) || sizeof($date) != 3) && $optional)
	{
		return false;
	}
	else if ($optional)
	{
		for ($field = 0; $field <= 1; $field++)
		{
			$date[$field] = (int) $date[$field];
			if (empty($date[$field]))
			{
				$date[$field] = 1;
			}
		}
		$date[2] = (int) $date[2];
		// assume an arbitrary leap year
		if (empty($date[2]))
		{
			$date[2] = 1980;
		}
	}

	if (sizeof($date) != 3 || !checkdate($date[1], $date[0], $date[2]))
	{
		return 'INVALID';
	}

	return false;
}


/**
* Validate Match
*
* @return	boolean|string	Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_match($string, $optional = false, $match = '')
{
	if (empty($string) && $optional)
	{
		return false;
	}

	if (empty($match))
	{
		return false;
	}

	if (!preg_match($match, $string))
	{
		return 'WRONG_DATA';
	}

	return false;
}

/**
* Validate Language Pack ISO Name
*
* Tests whether a language name is valid and installed
*
* @param string $lang_iso	The language string to test
*
* @return bool|string		Either false if validation succeeded or
*							a string which will be used as the error message
*							(with the variable name appended)
*/
function validate_language_iso_name($lang_iso)
{
	global $db;

	$sql = 'SELECT lang_id
		FROM ' . LANG_TABLE . "
		WHERE lang_iso = '" . $db->sql_escape($lang_iso) . "'";
	$result = $db->sql_query($sql);
	$lang_id = (int) $db->sql_fetchfield('lang_id');
	$db->sql_freeresult($result);

	return ($lang_id) ? false : 'WRONG_DATA';
}

/**
* Validate Timezone Name
*
* Tests whether a timezone name is valid
*
* @param string $timezone	The timezone string to test
*
* @return bool|string		Either false if validation succeeded or
*							a string which will be used as the error message
*							(with the variable name appended)
*/
function phpbb_validate_timezone($timezone)
{
	return (in_array($timezone, phpbb_get_timezone_identifiers($timezone))) ? false : 'TIMEZONE_INVALID';
}

/**
* Check to see if the username has been taken, or if it is disallowed.
* Also checks if it includes the " character, which we don't allow in usernames.
* Used for registering, changing names, and posting anonymously with a username
*
* @param string $username The username to check
* @param string $allowed_username An allowed username, default being $user->data['username']
*
* @return	mixed	Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_username($username, $allowed_username = false)
{
	global $config, $db, $user, $cache;

	$clean_username = utf8_clean_string($username);
	$allowed_username = ($allowed_username === false) ? $user->data['username_clean'] : utf8_clean_string($allowed_username);

	if ($allowed_username == $clean_username)
	{
		return false;
	}

	// ... fast checks first.
	if (strpos($username, '&quot;') !== false || strpos($username, '"') !== false || empty($clean_username))
	{
		return 'INVALID_CHARS';
	}

	$mbstring = $pcre = false;

	// generic UTF-8 character types supported?
	if (phpbb_pcre_utf8_support())
	{
		$pcre = true;
	}
	else if (function_exists('mb_ereg_match'))
	{
		mb_regex_encoding('UTF-8');
		$mbstring = true;
	}

	switch ($config['allow_name_chars'])
	{
		case 'USERNAME_CHARS_ANY':
			$pcre = true;
			$regex = '.+';
		break;

		case 'USERNAME_ALPHA_ONLY':
			$pcre = true;
			$regex = '[A-Za-z0-9]+';
		break;

		case 'USERNAME_ALPHA_SPACERS':
			$pcre = true;
			$regex = '[A-Za-z0-9-[\]_+ ]+';
		break;

		case 'USERNAME_LETTER_NUM':
			if ($pcre)
			{
				$regex = '[\p{Lu}\p{Ll}\p{N}]+';
			}
			else if ($mbstring)
			{
				$regex = '[[:upper:][:lower:][:digit:]]+';
			}
			else
			{
				$pcre = true;
				$regex = '[a-zA-Z0-9]+';
			}
		break;

		case 'USERNAME_LETTER_NUM_SPACERS':
			if ($pcre)
			{
				$regex = '[-\]_+ [\p{Lu}\p{Ll}\p{N}]+';
			}
			else if ($mbstring)
			{
				$regex = '[-\]_+ \[[:upper:][:lower:][:digit:]]+';
			}
			else
			{
				$pcre = true;
				$regex = '[-\]_+ [a-zA-Z0-9]+';
			}
		break;

		case 'USERNAME_ASCII':
		default:
			$pcre = true;
			$regex = '[\x01-\x7F]+';
		break;
	}

	if ($pcre)
	{
		if (!preg_match('#^' . $regex . '$#u', $username))
		{
			return 'INVALID_CHARS';
		}
	}
	else if ($mbstring)
	{
		mb_ereg_search_init($username, '^' . $regex . '$');
		if (!mb_ereg_search())
		{
			return 'INVALID_CHARS';
		}
	}

	$sql = 'SELECT username
		FROM ' . USERS_TABLE . "
		WHERE username_clean = '" . $db->sql_escape($clean_username) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if ($row)
	{
		return 'USERNAME_TAKEN';
	}

	$sql = 'SELECT group_name
		FROM ' . GROUPS_TABLE . "
		WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($username)) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if ($row)
	{
		return 'USERNAME_TAKEN';
	}

	$bad_usernames = $cache->obtain_disallowed_usernames();

	foreach ($bad_usernames as $bad_username)
	{
		if (preg_match('#^' . $bad_username . '$#', $clean_username))
		{
			return 'USERNAME_DISALLOWED';
		}
	}

	return false;
}

/**
* Check to see if the password meets the complexity settings
*
* @return	boolean|string	Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_password($password)
{
	global $config;

	if ($password === '' || $config['pass_complex'] === 'PASS_TYPE_ANY')
	{
		// Password empty or no password complexity required.
		return false;
	}

	$pcre = $mbstring = false;

	// generic UTF-8 character types supported?
	if (phpbb_pcre_utf8_support())
	{
		$upp = '\p{Lu}';
		$low = '\p{Ll}';
		$num = '\p{N}';
		$sym = '[^\p{Lu}\p{Ll}\p{N}]';
		$pcre = true;
	}
	else if (function_exists('mb_ereg_match'))
	{
		mb_regex_encoding('UTF-8');
		$upp = '[[:upper:]]';
		$low = '[[:lower:]]';
		$num = '[[:digit:]]';
		$sym = '[^[:upper:][:lower:][:digit:]]';
		$mbstring = true;
	}
	else
	{
		$upp = '[A-Z]';
		$low = '[a-z]';
		$num = '[0-9]';
		$sym = '[^A-Za-z0-9]';
		$pcre = true;
	}

	$chars = array();

	switch ($config['pass_complex'])
	{
		// No break statements below ...
		// We require strong passwords in case pass_complex is not set or is invalid
		default:

		// Require mixed case letters, numbers and symbols
		case 'PASS_TYPE_SYMBOL':
			$chars[] = $sym;

		// Require mixed case letters and numbers
		case 'PASS_TYPE_ALPHA':
			$chars[] = $num;

		// Require mixed case letters
		case 'PASS_TYPE_CASE':
			$chars[] = $low;
			$chars[] = $upp;
	}

	if ($pcre)
	{
		foreach ($chars as $char)
		{
			if (!preg_match('#' . $char . '#u', $password))
			{
				return 'INVALID_CHARS';
			}
		}
	}
	else if ($mbstring)
	{
		foreach ($chars as $char)
		{
			if (mb_ereg($char, $password) === false)
			{
				return 'INVALID_CHARS';
			}
		}
	}

	return false;
}

/**
* Check to see if email address is a valid address and contains a MX record
*
* @param string $email The email to check
*
* @return mixed Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function phpbb_validate_email($email, $config = null)
{
	if ($config === null)
	{
		global $config;
	}

	$email = strtolower($email);

	if (!preg_match('/^' . get_preg_expression('email') . '$/i', $email))
	{
		return 'EMAIL_INVALID';
	}

	// Check MX record.
	// The idea for this is from reading the UseBB blog/announcement. :)
	if ($config['email_check_mx'])
	{
		list(, $domain) = explode('@', $email);

		if (phpbb_checkdnsrr($domain, 'A') === false && phpbb_checkdnsrr($domain, 'MX') === false)
		{
			return 'DOMAIN_NO_MX_RECORD';
		}
	}

	return false;
}

/**
* Check to see if email address is banned or already present in the DB
*
* @param string $email The email to check
* @param string $allowed_email An allowed email, default being $user->data['user_email']
*
* @return mixed Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
*/
function validate_user_email($email, $allowed_email = false)
{
	global $config, $db, $user;

	$email = strtolower($email);
	$allowed_email = ($allowed_email === false) ? strtolower($user->data['user_email']) : strtolower($allowed_email);

	if ($allowed_email == $email)
	{
		return false;
	}

	$validate_email = phpbb_validate_email($email, $config);
	if ($validate_email)
	{
		return $validate_email;
	}

	if (($ban_reason = $user->check_ban(false, false, $email, true)) !== false)
	{
		return ($ban_reason === true) ? 'EMAIL_BANNED' : $ban_reason;
	}

	if (!$config['allow_emailreuse'])
	{
		$sql = 'SELECT user_email_hash
			FROM ' . USERS_TABLE . "
			WHERE user_email_hash = " . $db->sql_escape(phpbb_email_hash($email));
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if ($row)
		{
			return 'EMAIL_TAKEN';
		}
	}

	return false;
}

/**
* Validate jabber address
* Taken from the jabber class within flyspray (see author notes)
*
* @author flyspray.org
*/
function validate_jabber($jid)
{
	if (!$jid)
	{
		return false;
	}

	$separator_pos = strpos($jid, '@');

	if ($separator_pos === false)
	{
		return 'WRONG_DATA';
	}

	$username = substr($jid, 0, $separator_pos);
	$realm = substr($jid, $separator_pos + 1);

	if (strlen($username) == 0 || strlen($realm) < 3)
	{
		return 'WRONG_DATA';
	}

	$arr = explode('.', $realm);

	if (sizeof($arr) == 0)
	{
		return 'WRONG_DATA';
	}

	foreach ($arr as $part)
	{
		if (substr($part, 0, 1) == '-' || substr($part, -1, 1) == '-')
		{
			return 'WRONG_DATA';
		}

		if (!preg_match("@^[a-zA-Z0-9-.]+$@", $part))
		{
			return 'WRONG_DATA';
		}
	}

	$boundary = array(array(0, 127), array(192, 223), array(224, 239), array(240, 247), array(248, 251), array(252, 253));

	// Prohibited Characters RFC3454 + RFC3920
	$prohibited = array(
		// Table C.1.1
		array(0x0020, 0x0020),		// SPACE
		// Table C.1.2
		array(0x00A0, 0x00A0),		// NO-BREAK SPACE
		array(0x1680, 0x1680),		// OGHAM SPACE MARK
		array(0x2000, 0x2001),		// EN QUAD
		array(0x2001, 0x2001),		// EM QUAD
		array(0x2002, 0x2002),		// EN SPACE
		array(0x2003, 0x2003),		// EM SPACE
		array(0x2004, 0x2004),		// THREE-PER-EM SPACE
		array(0x2005, 0x2005),		// FOUR-PER-EM SPACE
		array(0x2006, 0x2006),		// SIX-PER-EM SPACE
		array(0x2007, 0x2007),		// FIGURE SPACE
		array(0x2008, 0x2008),		// PUNCTUATION SPACE
		array(0x2009, 0x2009),		// THIN SPACE
		array(0x200A, 0x200A),		// HAIR SPACE
		array(0x200B, 0x200B),		// ZERO WIDTH SPACE
		array(0x202F, 0x202F),		// NARROW NO-BREAK SPACE
		array(0x205F, 0x205F),		// MEDIUM MATHEMATICAL SPACE
		array(0x3000, 0x3000),		// IDEOGRAPHIC SPACE
		// Table C.2.1
		array(0x0000, 0x001F),		// [CONTROL CHARACTERS]
		array(0x007F, 0x007F),		// DELETE
		// Table C.2.2
		array(0x0080, 0x009F),		// [CONTROL CHARACTERS]
		array(0x06DD, 0x06DD),		// ARABIC END OF AYAH
		array(0x070F, 0x070F),		// SYRIAC ABBREVIATION MARK
		array(0x180E, 0x180E),		// MONGOLIAN VOWEL SEPARATOR
		array(0x200C, 0x200C), 		// ZERO WIDTH NON-JOINER
		array(0x200D, 0x200D),		// ZERO WIDTH JOINER
		array(0x2028, 0x2028),		// LINE SEPARATOR
		array(0x2029, 0x2029),		// PARAGRAPH SEPARATOR
		array(0x2060, 0x2060),		// WORD JOINER
		array(0x2061, 0x2061),		// FUNCTION APPLICATION
		array(0x2062, 0x2062),		// INVISIBLE TIMES
		array(0x2063, 0x2063),		// INVISIBLE SEPARATOR
		array(0x206A, 0x206F),		// [CONTROL CHARACTERS]
		array(0xFEFF, 0xFEFF),		// ZERO WIDTH NO-BREAK SPACE
		array(0xFFF9, 0xFFFC),		// [CONTROL CHARACTERS]
		array(0x1D173, 0x1D17A),	// [MUSICAL CONTROL CHARACTERS]
		// Table C.3
		array(0xE000, 0xF8FF),		// [PRIVATE USE, PLANE 0]
		array(0xF0000, 0xFFFFD),	// [PRIVATE USE, PLANE 15]
		array(0x100000, 0x10FFFD),	// [PRIVATE USE, PLANE 16]
		// Table C.4
		array(0xFDD0, 0xFDEF),		// [NONCHARACTER CODE POINTS]
		array(0xFFFE, 0xFFFF),		// [NONCHARACTER CODE POINTS]
		array(0x1FFFE, 0x1FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x2FFFE, 0x2FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x3FFFE, 0x3FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x4FFFE, 0x4FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x5FFFE, 0x5FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x6FFFE, 0x6FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x7FFFE, 0x7FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x8FFFE, 0x8FFFF),	// [NONCHARACTER CODE POINTS]
		array(0x9FFFE, 0x9FFFF),	// [NONCHARACTER CODE POINTS]
		array(0xAFFFE, 0xAFFFF),	// [NONCHARACTER CODE POINTS]
		array(0xBFFFE, 0xBFFFF),	// [NONCHARACTER CODE POINTS]
		array(0xCFFFE, 0xCFFFF),	// [NONCHARACTER CODE POINTS]
		array(0xDFFFE, 0xDFFFF),	// [NONCHARACTER CODE POINTS]
		array(0xEFFFE, 0xEFFFF),	// [NONCHARACTER CODE POINTS]
		array(0xFFFFE, 0xFFFFF),	// [NONCHARACTER CODE POINTS]
		array(0x10FFFE, 0x10FFFF),	// [NONCHARACTER CODE POINTS]
		// Table C.5
		array(0xD800, 0xDFFF),		// [SURROGATE CODES]
		// Table C.6
		array(0xFFF9, 0xFFF9),		// INTERLINEAR ANNOTATION ANCHOR
		array(0xFFFA, 0xFFFA),		// INTERLINEAR ANNOTATION SEPARATOR
		array(0xFFFB, 0xFFFB),		// INTERLINEAR ANNOTATION TERMINATOR
		array(0xFFFC, 0xFFFC),		// OBJECT REPLACEMENT CHARACTER
		array(0xFFFD, 0xFFFD),		// REPLACEMENT CHARACTER
		// Table C.7
		array(0x2FF0, 0x2FFB),		// [IDEOGRAPHIC DESCRIPTION CHARACTERS]
		// Table C.8
		array(0x0340, 0x0340),		// COMBINING GRAVE TONE MARK
		array(0x0341, 0x0341),		// COMBINING ACUTE TONE MARK
		array(0x200E, 0x200E),		// LEFT-TO-RIGHT MARK
		array(0x200F, 0x200F),		// RIGHT-TO-LEFT MARK
		array(0x202A, 0x202A),		// LEFT-TO-RIGHT EMBEDDING
		array(0x202B, 0x202B),		// RIGHT-TO-LEFT EMBEDDING
		array(0x202C, 0x202C),		// POP DIRECTIONAL FORMATTING
		array(0x202D, 0x202D),		// LEFT-TO-RIGHT OVERRIDE
		array(0x202E, 0x202E),		// RIGHT-TO-LEFT OVERRIDE
		array(0x206A, 0x206A),		// INHIBIT SYMMETRIC SWAPPING
		array(0x206B, 0x206B),		// ACTIVATE SYMMETRIC SWAPPING
		array(0x206C, 0x206C),		// INHIBIT ARABIC FORM SHAPING
		array(0x206D, 0x206D),		// ACTIVATE ARABIC FORM SHAPING
		array(0x206E, 0x206E),		// NATIONAL DIGIT SHAPES
		array(0x206F, 0x206F),		// NOMINAL DIGIT SHAPES
		// Table C.9
		array(0xE0001, 0xE0001),	// LANGUAGE TAG
		array(0xE0020, 0xE007F),	// [TAGGING CHARACTERS]
		// RFC3920
		array(0x22, 0x22),			// "
		array(0x26, 0x26),			// &
		array(0x27, 0x27),			// '
		array(0x2F, 0x2F),			// /
		array(0x3A, 0x3A),			// :
		array(0x3C, 0x3C),			// <
		array(0x3E, 0x3E),			// >
		array(0x40, 0x40)			// @
	);

	$pos = 0;
	$result = true;

	while ($pos < strlen($username))
	{
		$len = $uni = 0;
		for ($i = 0; $i <= 5; $i++)
		{
			if (ord($username[$pos]) >= $boundary[$i][0] && ord($username[$pos]) <= $boundary[$i][1])
			{
				$len = $i + 1;
				$uni = (ord($username[$pos]) - $boundary[$i][0]) * pow(2, $i * 6);

				for ($k = 1; $k < $len; $k++)
				{
					$uni += (ord($username[$pos + $k]) - 128) * pow(2, ($i - $k) * 6);
				}

				break;
			}
		}

		if ($len == 0)
		{
			return 'WRONG_DATA';
		}

		foreach ($prohibited as $pval)
		{
			if ($uni >= $pval[0] && $uni <= $pval[1])
			{
				$result = false;
				break 2;
			}
		}

		$pos = $pos + $len;
	}

	if (!$result)
	{
		return 'WRONG_DATA';
	}

	return false;
}

/**
* Validate hex colour value
*
* @param string $colour The hex colour value
* @param bool $optional Whether the colour value is optional. True if an empty
*			string will be accepted as correct input, false if not.
* @return bool|string Error message if colour value is incorrect, false if it
*			fits the hex colour code
*/
function phpbb_validate_hex_colour($colour, $optional = false)
{
	if ($colour === '')
	{
		return (($optional) ? false : 'WRONG_DATA');
	}

	if (!preg_match('/^([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/', $colour))
	{
		return 'WRONG_DATA';
	}

	return false;
}

/**
* Verifies whether a style ID corresponds to an active style.
*
* @param int $style_id The style_id of a style which should be checked if activated or not.
* @return boolean
*/
function phpbb_style_is_active($style_id)
{
	global $db;

	$sql = 'SELECT style_active
		FROM ' . STYLES_TABLE . '
		WHERE style_id = '. (int) $style_id;
	$result = $db->sql_query($sql);

	$style_is_active = (bool) $db->sql_fetchfield('style_active');
	$db->sql_freeresult($result);

	return $style_is_active;
}

/**
* Remove avatar
*/
function avatar_delete($mode, $row, $clean_db = false)
{
	global $phpbb_root_path, $config, $db, $user;

	// Check if the users avatar is actually *not* a group avatar
	if ($mode == 'user')
	{
		if (strpos($row['user_avatar'], 'g') === 0 || (((int) $row['user_avatar'] !== 0) && ((int) $row['user_avatar'] !== (int) $row['user_id'])))
		{
			return false;
		}
	}

	if ($clean_db)
	{
		avatar_remove_db($row[$mode . '_avatar']);
	}
	$filename = get_avatar_filename($row[$mode . '_avatar']);

	if (file_exists($phpbb_root_path . $config['avatar_path'] . '/' . $filename))
	{
		@unlink($phpbb_root_path . $config['avatar_path'] . '/' . $filename);
		return true;
	}

	return false;
}

/**
* Generates avatar filename from the database entry
*/
function get_avatar_filename($avatar_entry)
{
	global $config;

	if ($avatar_entry[0] === 'g')
	{
		$avatar_group = true;
		$avatar_entry = substr($avatar_entry, 1);
	}
	else
	{
		$avatar_group = false;
	}
	$ext 			= substr(strrchr($avatar_entry, '.'), 1);
	$avatar_entry	= intval($avatar_entry);
	return $config['avatar_salt'] . '_' . (($avatar_group) ? 'g' : '') . $avatar_entry . '.' . $ext;
}

/**
* Returns an explanation string with maximum avatar settings
*
* @return string
*/
function phpbb_avatar_explanation_string()
{
	global $config, $user;

	return $user->lang('AVATAR_EXPLAIN',
		$user->lang('PIXELS', (int) $config['avatar_max_width']),
		$user->lang('PIXELS', (int) $config['avatar_max_height']),
		round($config['avatar_filesize'] / 1024));
}

//
// Usergroup functions
//

/**
* Add or edit a group. If we're editing a group we only update user
* parameters such as rank, etc. if they are changed
*/
function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow_desc_bbcode = false, $allow_desc_urls = false, $allow_desc_smilies = false)
{
	global $phpbb_root_path, $config, $db, $user, $file_upload, $phpbb_container;

	$error = array();

	// Attributes which also affect the users table
	$user_attribute_ary = array('group_colour', 'group_rank', 'group_avatar', 'group_avatar_type', 'group_avatar_width', 'group_avatar_height');

	// Check data. Limit group name length.
	if (!utf8_strlen($name) || utf8_strlen($name) > 60)
	{
		$error[] = (!utf8_strlen($name)) ? $user->lang['GROUP_ERR_USERNAME'] : $user->lang['GROUP_ERR_USER_LONG'];
	}

	$err = group_validate_groupname($group_id, $name);
	if (!empty($err))
	{
		$error[] = $user->lang[$err];
	}

	if (!in_array($type, array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN, GROUP_SPECIAL, GROUP_FREE)))
	{
		$error[] = $user->lang['GROUP_ERR_TYPE'];
	}

	$group_teampage = !empty($group_attributes['group_teampage']);
	unset($group_attributes['group_teampage']);

	if (!sizeof($error))
	{
		$current_legend = \phpbb\groupposition\legend::GROUP_DISABLED;
		$current_teampage = \phpbb\groupposition\teampage::GROUP_DISABLED;

		$legend = $phpbb_container->get('groupposition.legend');
		$teampage = $phpbb_container->get('groupposition.teampage');
		if ($group_id)
		{
			try
			{
				$current_legend = $legend->get_group_value($group_id);
				$current_teampage = $teampage->get_group_value($group_id);
			}
			catch (\phpbb\groupposition\exception $exception)
			{
				trigger_error($user->lang($exception->getMessage()));
			}
		}

		if (!empty($group_attributes['group_legend']))
		{
			if (($group_id && ($current_legend == \phpbb\groupposition\legend::GROUP_DISABLED)) || !$group_id)
			{
				// Old group currently not in the legend or new group, add at the end.
				$group_attributes['group_legend'] = 1 + $legend->get_group_count();
			}
			else
			{
				// Group stayes in the legend
				$group_attributes['group_legend'] = $current_legend;
			}
		}
		else if ($group_id && ($current_legend != \phpbb\groupposition\legend::GROUP_DISABLED))
		{
			// Group is removed from the legend
			try
			{
				$legend->delete_group($group_id, true);
			}
			catch (\phpbb\groupposition\exception $exception)
			{
				trigger_error($user->lang($exception->getMessage()));
			}
			$group_attributes['group_legend'] = \phpbb\groupposition\legend::GROUP_DISABLED;
		}
		else
		{
			$group_attributes['group_legend'] = \phpbb\groupposition\legend::GROUP_DISABLED;
		}

		// Unset the objects, we don't need them anymore.
		unset($legend);

		$user_ary = array();
		$sql_ary = array(
			'group_name'			=> (string) $name,
			'group_desc'			=> (string) $desc,
			'group_desc_uid'		=> '',
			'group_desc_bitfield'	=> '',
			'group_type'			=> (int) $type,
		);

		// Parse description
		if ($desc)
		{
			generate_text_for_storage($sql_ary['group_desc'], $sql_ary['group_desc_uid'], $sql_ary['group_desc_bitfield'], $sql_ary['group_desc_options'], $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies);
		}

		if (sizeof($group_attributes))
		{
			// Merge them with $sql_ary to properly update the group
			$sql_ary = array_merge($sql_ary, $group_attributes);
		}

		// Setting the log message before we set the group id (if group gets added)
		$log = ($group_id) ? 'LOG_GROUP_UPDATED' : 'LOG_GROUP_CREATED';

		$query = '';

		if ($group_id)
		{
			$sql = 'SELECT user_id
				FROM ' . USERS_TABLE . '
				WHERE group_id = ' . $group_id;
			$result = $db->sql_query($sql);

			while ($row = $db->sql_fetchrow($result))
			{
				$user_ary[] = $row['user_id'];
			}
			$db->sql_freeresult($result);

			if (isset($sql_ary['group_avatar']))
			{
				remove_default_avatar($group_id, $user_ary);
			}

			if (isset($sql_ary['group_rank']))
			{
				remove_default_rank($group_id, $user_ary);
			}

			$sql = 'UPDATE ' . GROUPS_TABLE . '
				SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
				WHERE group_id = $group_id";
			$db->sql_query($sql);

			// Since we may update the name too, we need to do this on other tables too...
			$sql = 'UPDATE ' . MODERATOR_CACHE_TABLE . "
				SET group_name = '" . $db->sql_escape($sql_ary['group_name']) . "'
				WHERE group_id = $group_id";
			$db->sql_query($sql);

			// One special case is the group skip auth setting. If this was changed we need to purge permissions for this group
			if (isset($group_attributes['group_skip_auth']))
			{
				// Get users within this group...
				$sql = 'SELECT user_id
					FROM ' . USER_GROUP_TABLE . '
					WHERE group_id = ' . $group_id . '
						AND user_pending = 0';
				$result = $db->sql_query($sql);

				$user_id_ary = array();
				while ($row = $db->sql_fetchrow($result))
				{
					$user_id_ary[] = $row['user_id'];
				}
				$db->sql_freeresult($result);

				if (!empty($user_id_ary))
				{
					global $auth;

					// Clear permissions cache of relevant users
					$auth->acl_clear_prefetch($user_id_ary);
				}
			}
		}
		else
		{
			$sql = 'INSERT INTO ' . GROUPS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
			$db->sql_query($sql);
		}

		// Remove the group from the teampage, only if unselected and we are editing a group,
		// which is currently displayed.
		if (!$group_teampage && $group_id && $current_teampage != \phpbb\groupposition\teampage::GROUP_DISABLED)
		{
			try
			{
				$teampage->delete_group($group_id);
			}
			catch (\phpbb\groupposition\exception $exception)
			{
				trigger_error($user->lang($exception->getMessage()));
			}
		}

		if (!$group_id)
		{
			$group_id = $db->sql_nextid();

			if (isset($sql_ary['group_avatar_type']) && $sql_ary['group_avatar_type'] == 'avatar.driver.upload')
			{
				group_correct_avatar($group_id, $sql_ary['group_avatar']);
			}
		}

		try
		{
			if ($group_teampage && $current_teampage == \phpbb\groupposition\teampage::GROUP_DISABLED)
			{
				$teampage->add_group($group_id);
			}

			if ($group_teampage)
			{
				if ($current_teampage == \phpbb\groupposition\teampage::GROUP_DISABLED)
				{
					$teampage->add_group($group_id);
				}
			}
			else if ($group_id && ($current_teampage != \phpbb\groupposition\teampage::GROUP_DISABLED))
			{
				$teampage->delete_group($group_id);
			}
		}
		catch (\phpbb\groupposition\exception $exception)
		{
			trigger_error($user->lang($exception->getMessage()));
		}
		unset($teampage);

		// Set user attributes
		$sql_ary = array();
		if (sizeof($group_attributes))
		{
			// Go through the user attributes array, check if a group attribute matches it and then set it. ;)
			foreach ($user_attribute_ary as $attribute)
			{
				if (!isset($group_attributes[$attribute]))
				{
					continue;
				}

				// If we are about to set an avatar, we will not overwrite user avatars if no group avatar is set...
				if (strpos($attribute, 'group_avatar') === 0 && !$group_attributes[$attribute])
				{
					continue;
				}

				$sql_ary[$attribute] = $group_attributes[$attribute];
			}
		}

		if (sizeof($sql_ary) && sizeof($user_ary))
		{
			group_set_user_default($group_id, $user_ary, $sql_ary);
		}

		$name = ($type == GROUP_SPECIAL) ? $user->lang['G_' . $name] : $name;
		add_log('admin', $log, $name);

		group_update_listings($group_id);
	}

	return (sizeof($error)) ? $error : false;
}


/**
* Changes a group avatar's filename to conform to the naming scheme
*/
function group_correct_avatar($group_id, $old_entry)
{
	global $config, $db, $phpbb_root_path;

	$group_id		= (int) $group_id;
	$ext 			= substr(strrchr($old_entry, '.'), 1);
	$old_filename 	= get_avatar_filename($old_entry);
	$new_filename 	= $config['avatar_salt'] . "_g$group_id.$ext";
	$new_entry 		= 'g' . $group_id . '_' . substr(time(), -5) . ".$ext";

	$avatar_path = $phpbb_root_path . $config['avatar_path'];
	if (@rename($avatar_path . '/'. $old_filename, $avatar_path . '/' . $new_filename))
	{
		$sql = 'UPDATE ' . GROUPS_TABLE . '
			SET group_avatar = \'' . $db->sql_escape($new_entry) . "'
			WHERE group_id = $group_id";
		$db->sql_query($sql);
	}
}


/**
* Remove avatar also for users not having the group as default
*/
function avatar_remove_db($avatar_name)
{
	global $config, $db;

	$sql = 'UPDATE ' . USERS_TABLE . "
		SET user_avatar = '',
		user_avatar_type = ''
		WHERE user_avatar = '" . $db->sql_escape($avatar_name) . '\'';
	$db->sql_query($sql);
}


/**
* Group Delete
*/
function group_delete($group_id, $group_name = false)
{
	global $db, $cache, $auth, $user, $phpbb_root_path, $phpEx, $phpbb_dispatcher, $phpbb_container;

	if (!$group_name)
	{
		$group_name = get_group_name($group_id);
	}

	$start = 0;

	do
	{
		$user_id_ary = $username_ary = array();

		// Batch query for group members, call group_user_del
		$sql = 'SELECT u.user_id, u.username
			FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . " u
			WHERE ug.group_id = $group_id
				AND u.user_id = ug.user_id";
		$result = $db->sql_query_limit($sql, 200, $start);

		if ($row = $db->sql_fetchrow($result))
		{
			do
			{
				$user_id_ary[] = $row['user_id'];
				$username_ary[] = $row['username'];

				$start++;
			}
			while ($row = $db->sql_fetchrow($result));

			group_user_del($group_id, $user_id_ary, $username_ary, $group_name);
		}
		else
		{
			$start = 0;
		}
		$db->sql_freeresult($result);
	}
	while ($start);

	// Delete group from legend and teampage
	try
	{
		$legend = $phpbb_container->get('groupposition.legend');
		$legend->delete_group($group_id);
		unset($legend);
	}
	catch (\phpbb\groupposition\exception $exception)
	{
		// The group we want to delete does not exist.
		// No reason to worry, we just continue the deleting process.
		//trigger_error($user->lang($exception->getMessage()));
	}

	try
	{
		$teampage = $phpbb_container->get('groupposition.teampage');
		$teampage->delete_group($group_id);
		unset($teampage);
	}
	catch (\phpbb\groupposition\exception $exception)
	{
		// The group we want to delete does not exist.
		// No reason to worry, we just continue the deleting process.
		//trigger_error($user->lang($exception->getMessage()));
	}

	// Delete group
	$sql = 'DELETE FROM ' . GROUPS_TABLE . "
		WHERE group_id = $group_id";
	$db->sql_query($sql);

	// Delete auth entries from the groups table
	$sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . "
		WHERE group_id = $group_id";
	$db->sql_query($sql);

	/**
	* Event after a group is deleted
	*
	* @event core.delete_group_after
	* @var	int		group_id	ID of the deleted group
	* @var	string	group_name	Name of the deleted group
	* @since 3.1.0-a1
	*/
	$vars = array('group_id', 'group_name');
	extract($phpbb_dispatcher->trigger_event('core.delete_group_after', compact($vars)));

	// Re-cache moderators
	if (!function_exists('phpbb_cache_moderators'))
	{
		include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
	}

	phpbb_cache_moderators($db, $cache, $auth);

	add_log('admin', 'LOG_GROUP_DELETE', $group_name);

	// Return false - no error
	return false;
}

/**
* Add user(s) to group
*
* @return mixed false if no errors occurred, else the user lang string for the relevant error, for example 'NO_USER'
*/
function group_user_add($group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $default = false, $leader = 0, $pending = 0, $group_attributes = false)
{
	global $db, $auth, $phpbb_container;

	// We need both username and user_id info
	$result = user_get_id_name($user_id_ary, $username_ary);

	if (!sizeof($user_id_ary) || $result !== false)
	{
		return 'NO_USER';
	}

	// Remove users who are already members of this group
	$sql = 'SELECT user_id, group_leader
		FROM ' . USER_GROUP_TABLE . '
		WHERE ' . $db->sql_in_set('user_id', $user_id_ary) . "
			AND group_id = $group_id";
	$result = $db->sql_query($sql);

	$add_id_ary = $update_id_ary = array();
	while ($row = $db->sql_fetchrow($result))
	{
		$add_id_ary[] = (int) $row['user_id'];

		if ($leader && !$row['group_leader'])
		{
			$update_id_ary[] = (int) $row['user_id'];
		}
	}
	$db->sql_freeresult($result);

	// Do all the users exist in this group?
	$add_id_ary = array_diff($user_id_ary, $add_id_ary);

	// If we have no users
	if (!sizeof($add_id_ary) && !sizeof($update_id_ary))
	{
		return 'GROUP_USERS_EXIST';
	}

	$db->sql_transaction('begin');

	// Insert the new users
	if (sizeof($add_id_ary))
	{
		$sql_ary = array();

		foreach ($add_id_ary as $user_id)
		{
			$sql_ary[] = array(
				'user_id'		=> (int) $user_id,
				'group_id'		=> (int) $group_id,
				'group_leader'	=> (int) $leader,
				'user_pending'	=> (int) $pending,
			);
		}

		$db->sql_multi_insert(USER_GROUP_TABLE, $sql_ary);
	}

	if (sizeof($update_id_ary))
	{
		$sql = 'UPDATE ' . USER_GROUP_TABLE . '
			SET group_leader = 1
			WHERE ' . $db->sql_in_set('user_id', $update_id_ary) . "
				AND group_id = $group_id";
		$db->sql_query($sql);
	}

	if ($default)
	{
		group_user_attributes('default', $group_id, $user_id_ary, false, $group_name, $group_attributes);
	}

	$db->sql_transaction('commit');

	// Clear permissions cache of relevant users
	$auth->acl_clear_prefetch($user_id_ary);

	if (!$group_name)
	{
		$group_name = get_group_name($group_id);
	}

	$log = ($leader) ? 'LOG_MODS_ADDED' : (($pending) ? 'LOG_USERS_PENDING' : 'LOG_USERS_ADDED');

	add_log('admin', $log, $group_name, implode(', ', $username_ary));

	group_update_listings($group_id);

	if ($pending)
	{
		$phpbb_notifications = $phpbb_container->get('notification_manager');

		foreach ($add_id_ary as $user_id)
		{
			$phpbb_notifications->add_notifications('group_request', array(
				'group_id'		=> $group_id,
				'user_id'		=> $user_id,
				'group_name'	=> $group_name,
			));
		}
	}

	// Return false - no error
	return false;
}

/**
* Remove a user/s from a given group. When we remove users we update their
* default group_id. We do this by examining which "special" groups they belong
* to. The selection is made based on a reasonable priority system
*
* @return false if no errors occurred, else the user lang string for the relevant error, for example 'NO_USER'
*/
function group_user_del($group_id, $user_id_ary = false, $username_ary = false, $group_name = false)
{
	global $db, $auth, $config, $phpbb_dispatcher, $phpbb_container;

	if ($config['coppa_enable'])
	{
		$group_order = array('ADMINISTRATORS', 'GLOBAL_MODERATORS', 'NEWLY_REGISTERED', 'REGISTERED_COPPA', 'REGISTERED', 'BOTS', 'GUESTS');
	}
	else
	{
		$group_order = array('ADMINISTRATORS', 'GLOBAL_MODERATORS', 'NEWLY_REGISTERED', 'REGISTERED', 'BOTS', 'GUESTS');
	}

	// We need both username and user_id info
	$result = user_get_id_name($user_id_ary, $username_ary);

	if (!sizeof($user_id_ary) || $result !== false)
	{
		return 'NO_USER';
	}

	$sql = 'SELECT *
		FROM ' . GROUPS_TABLE . '
		WHERE ' . $db->sql_in_set('group_name', $group_order);
	$result = $db->sql_query($sql);

	$group_order_id = $special_group_data = array();
	while ($row = $db->sql_fetchrow($result))
	{
		$group_order_id[$row['group_name']] = $row['group_id'];

		$special_group_data[$row['group_id']] = array(
			'group_colour'			=> $row['group_colour'],
			'group_rank'				=> $row['group_rank'],
		);

		// Only set the group avatar if one is defined...
		if ($row['group_avatar'])
		{
			$special_group_data[$row['group_id']] = array_merge($special_group_data[$row['group_id']], array(
				'group_avatar'			=> $row['group_avatar'],
				'group_avatar_type'		=> $row['group_avatar_type'],
				'group_avatar_width'		=> $row['group_avatar_width'],
				'group_avatar_height'	=> $row['group_avatar_height'])
			);
		}
	}
	$db->sql_freeresult($result);

	// Get users default groups - we only need to reset default group membership if the group from which the user gets removed is set as default
	$sql = 'SELECT user_id, group_id
		FROM ' . USERS_TABLE . '
		WHERE ' . $db->sql_in_set('user_id', $user_id_ary);
	$result = $db->sql_query($sql);

	$default_groups = array();
	while ($row = $db->sql_fetchrow($result))
	{
		$default_groups[$row['user_id']] = $row['group_id'];
	}
	$db->sql_freeresult($result);

	// What special group memberships exist for these users?
	$sql = 'SELECT g.group_id, g.group_name, ug.user_id
		FROM ' . USER_GROUP_TABLE . ' ug, ' . GROUPS_TABLE . ' g
		WHERE ' . $db->sql_in_set('ug.user_id', $user_id_ary) . "
			AND g.group_id = ug.group_id
			AND g.group_id <> $group_id
			AND g.group_type = " . GROUP_SPECIAL . '
		ORDER BY ug.user_id, g.group_id';
	$result = $db->sql_query($sql);

	$temp_ary = array();
	while ($row = $db->sql_fetchrow($result))
	{
		if ($default_groups[$row['user_id']] == $group_id && (!isset($temp_ary[$row['user_id']]) || $group_order_id[$row['group_name']] < $temp_ary[$row['user_id']]))
		{
			$temp_ary[$row['user_id']] = $row['group_id'];
		}
	}
	$db->sql_freeresult($result);

	// sql_where_ary holds the new default groups and their users
	$sql_where_ary = array();
	foreach ($temp_ary as $uid => $gid)
	{
		$sql_where_ary[$gid][] = $uid;
	}
	unset($temp_ary);

	foreach ($special_group_data as $gid => $default_data_ary)
	{
		if (isset($sql_where_ary[$gid]) && sizeof($sql_where_ary[$gid]))
		{
			remove_default_rank($group_id, $sql_where_ary[$gid]);
			remove_default_avatar($group_id, $sql_where_ary[$gid]);
			group_set_user_default($gid, $sql_where_ary[$gid], $default_data_ary);
		}
	}
	unset($special_group_data);

	/**
	* Event before users are removed from a group
	*
	* @event core.group_delete_user_before
	* @var	int		group_id		ID of the group from which users are deleted
	* @var	string	group_name		Name of the group
	* @var	array	user_id_ary		IDs of the users which are removed
	* @var	array	username_ary	names of the users which are removed
	* @since 3.1.0-a1
	*/
	$vars = array('group_id', 'group_name', 'user_id_ary', 'username_ary');
	extract($phpbb_dispatcher->trigger_event('core.group_delete_user_before', compact($vars)));

	$sql = 'DELETE FROM ' . USER_GROUP_TABLE . "
		WHERE group_id = $group_id
			AND " . $db->sql_in_set('user_id', $user_id_ary);
	$db->sql_query($sql);

	// Clear permissions cache of relevant users
	$auth->acl_clear_prefetch($user_id_ary);

	if (!$group_name)
	{
		$group_name = get_group_name($group_id);
	}

	$log = 'LOG_GROUP_REMOVE';

	if ($group_name)
	{
		add_log('admin', $log, $group_name, implode(', ', $username_ary));
	}

	group_update_listings($group_id);

	$phpbb_notifications = $phpbb_container->get('notification_manager');

	$phpbb_notifications->delete_notifications('group_request', $user_id_ary, $group_id);

	// Return false - no error
	return false;
}


/**
* Removes the group avatar of the default group from the users in user_ids who have that group as default.
*/
function remove_default_avatar($group_id, $user_ids)
{
	global $db;

	if (!is_array($user_ids))
	{
		$user_ids = array($user_ids);
	}
	if (empty($user_ids))
	{
		return false;
	}

	$user_ids = array_map('intval', $user_ids);

	$sql = 'SELECT *
		FROM ' . GROUPS_TABLE . '
		WHERE group_id = ' . (int) $group_id;
	$result = $db->sql_query($sql);
	if (!$row = $db->sql_fetchrow($result))
	{
		$db->sql_freeresult($result);
		return false;
	}
	$db->sql_freeresult($result);

	$sql = 'UPDATE ' . USERS_TABLE . "
		SET user_avatar = '',
			user_avatar_type = '',
			user_avatar_width = 0,
			user_avatar_height = 0
		WHERE group_id = " . (int) $group_id . "
			AND user_avatar = '" . $db->sql_escape($row['group_avatar']) . "'
			AND " . $db->sql_in_set('user_id', $user_ids);

	$db->sql_query($sql);
}

/**
* Removes the group rank of the default group from the users in user_ids who have that group as default.
*/
function remove_default_rank($group_id, $user_ids)
{
	global $db;

	if (!is_array($user_ids))
	{
		$user_ids = array($user_ids);
	}
	if (empty($user_ids))
	{
		return false;
	}

	$user_ids = array_map('intval', $user_ids);

	$sql = 'SELECT *
		FROM ' . GROUPS_TABLE . '
		WHERE group_id = ' . (int) $group_id;
	$result = $db->sql_query($sql);
	if (!$row = $db->sql_fetchrow($result))
	{
		$db->sql_freeresult($result);
		return false;
	}
	$db->sql_freeresult($result);

	$sql = 'UPDATE ' . USERS_TABLE . '
		SET user_rank = 0
		WHERE group_id = ' . (int) $group_id . '
			AND user_rank <> 0
			AND user_rank = ' . (int) $row['group_rank'] . '
			AND ' . $db->sql_in_set('user_id', $user_ids);
	$db->sql_query($sql);
}

/**
* This is used to promote (to leader), demote or set as default a member/s
*/
function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)
{
	global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container;

	// We need both username and user_id info
	$result = user_get_id_name($user_id_ary, $username_ary);

	if (!sizeof($user_id_ary) || $result !== false)
	{
		return 'NO_USERS';
	}

	if (!$group_name)
	{
		$group_name = get_group_name($group_id);
	}

	switch ($action)
	{
		case 'demote':
		case 'promote':

			$sql = 'SELECT user_id
				FROM ' . USER_GROUP_TABLE . "
				WHERE group_id = $group_id
					AND user_pending = 1
					AND " . $db->sql_in_set('user_id', $user_id_ary);
			$result = $db->sql_query_limit($sql, 1);
			$not_empty = ($db->sql_fetchrow($result));
			$db->sql_freeresult($result);
			if ($not_empty)
			{
				return 'NO_VALID_USERS';
			}

			$sql = 'UPDATE ' . USER_GROUP_TABLE . '
				SET group_leader = ' . (($action == 'promote') ? 1 : 0) . "
				WHERE group_id = $group_id
					AND user_pending = 0
					AND " . $db->sql_in_set('user_id', $user_id_ary);
			$db->sql_query($sql);

			$log = ($action == 'promote') ? 'LOG_GROUP_PROMOTED' : 'LOG_GROUP_DEMOTED';
		break;

		case 'approve':
			// Make sure we only approve those which are pending ;)
			$sql = 'SELECT u.user_id, u.user_email, u.username, u.username_clean, u.user_notify_type, u.user_jabber, u.user_lang
				FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug
				WHERE ug.group_id = ' . $group_id . '
					AND ug.user_pending = 1
					AND ug.user_id = u.user_id
					AND ' . $db->sql_in_set('ug.user_id', $user_id_ary);
			$result = $db->sql_query($sql);

			$user_id_ary = array();
			while ($row = $db->sql_fetchrow($result))
			{
				$user_id_ary[] = $row['user_id'];
			}
			$db->sql_freeresult($result);

			if (!sizeof($user_id_ary))
			{
				return false;
			}

			$sql = 'UPDATE ' . USER_GROUP_TABLE . "
				SET user_pending = 0
				WHERE group_id = $group_id
					AND " . $db->sql_in_set('user_id', $user_id_ary);
			$db->sql_query($sql);

			$phpbb_notifications = $phpbb_container->get('notification_manager');

			$phpbb_notifications->add_notifications('group_request_approved', array(
				'user_ids'		=> $user_id_ary,
				'group_id'		=> $group_id,
				'group_name'	=> $group_name,
			));
			$phpbb_notifications->delete_notifications('group_request', $user_id_ary, $group_id);

			$log = 'LOG_USERS_APPROVED';
		break;

		case 'default':
			// We only set default group for approved members of the group
			$sql = 'SELECT user_id
				FROM ' . USER_GROUP_TABLE . "
				WHERE group_id = $group_id
					AND user_pending = 0
					AND " . $db->sql_in_set('user_id', $user_id_ary);
			$result = $db->sql_query($sql);

			$user_id_ary = $username_ary = array();
			while ($row = $db->sql_fetchrow($result))
			{
				$user_id_ary[] = $row['user_id'];
			}
			$db->sql_freeresult($result);

			$result = user_get_id_name($user_id_ary, $username_ary);
			if (!sizeof($user_id_ary) || $result !== false)
			{
				return 'NO_USERS';
			}

			$sql = 'SELECT user_id, group_id
				FROM ' . USERS_TABLE . '
				WHERE ' . $db->sql_in_set('user_id', $user_id_ary, false, true);
			$result = $db->sql_query($sql);

			$groups = array();
			while ($row = $db->sql_fetchrow($result))
			{
				if (!isset($groups[$row['group_id']]))
				{
					$groups[$row['group_id']] = array();
				}
				$groups[$row['group_id']][] = $row['user_id'];
			}
			$db->sql_freeresult($result);

			foreach ($groups as $gid => $uids)
			{
				remove_default_rank($gid, $uids);
				remove_default_avatar($gid, $uids);
			}
			group_set_user_default($group_id, $user_id_ary, $group_attributes);
			$log = 'LOG_GROUP_DEFAULTS';
		break;
	}

	// Clear permissions cache of relevant users
	$auth->acl_clear_prefetch($user_id_ary);

	add_log('admin', $log, $group_name, implode(', ', $username_ary));

	group_update_listings($group_id);

	return false;
}

/**
* A small version of validate_username to check for a group name's existence. To be called directly.
*/
function group_validate_groupname($group_id, $group_name)
{
	global $config, $db;

	$group_name =  utf8_clean_string($group_name);

	if (!empty($group_id))
	{
		$sql = 'SELECT group_name
			FROM ' . GROUPS_TABLE . '
			WHERE group_id = ' . (int) $group_id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if (!$row)
		{
			return false;
		}

		$allowed_groupname = utf8_clean_string($row['group_name']);

		if ($allowed_groupname == $group_name)
		{
			return false;
		}
	}

	$sql = 'SELECT group_name
		FROM ' . GROUPS_TABLE . "
		WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($group_name)) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if ($row)
	{
		return 'GROUP_NAME_TAKEN';
	}

	return false;
}

/**
* Set users default group
*
* @access private
*/
function group_set_user_default($group_id, $user_id_ary, $group_attributes = false, $update_listing = false)
{
	global $phpbb_container, $db, $phpbb_dispatcher;

	if (empty($user_id_ary))
	{
		return;
	}

	$attribute_ary = array(
		'group_colour'			=> 'string',
		'group_rank'			=> 'int',
		'group_avatar'			=> 'string',
		'group_avatar_type'		=> 'string',
		'group_avatar_width'	=> 'int',
		'group_avatar_height'	=> 'int',
	);

	$sql_ary = array(
		'group_id'		=> $group_id
	);

	// Were group attributes passed to the function? If not we need to obtain them
	if ($group_attributes === false)
	{
		$sql = 'SELECT ' . implode(', ', array_keys($attribute_ary)) . '
			FROM ' . GROUPS_TABLE . "
			WHERE group_id = $group_id";
		$result = $db->sql_query($sql);
		$group_attributes = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);
	}

	foreach ($attribute_ary as $attribute => $type)
	{
		if (isset($group_attributes[$attribute]))
		{
			// If we are about to set an avatar or rank, we will not overwrite with empty, unless we are not actually changing the default group
			if ((strpos($attribute, 'group_avatar') === 0 || strpos($attribute, 'group_rank') === 0) && !$group_attributes[$attribute])
			{
				continue;
			}

			settype($group_attributes[$attribute], $type);
			$sql_ary[str_replace('group_', 'user_', $attribute)] = $group_attributes[$attribute];
		}
	}

	$updated_sql_ary = $sql_ary;

	// Before we update the user attributes, we will update the rank for users that don't have a custom rank
	if (isset($sql_ary['user_rank']))
	{
		$sql = 'UPDATE ' . USERS_TABLE . '
			SET ' . $db->sql_build_array('UPDATE', array('user_rank' => $sql_ary['user_rank'])) . '
			WHERE user_rank = 0
				AND ' . $db->sql_in_set('user_id', $user_id_ary);
		$db->sql_query($sql);
		unset($sql_ary['user_rank']);
	}

	// Before we update the user attributes, we will update the avatar for users that don't have a custom avatar
	$avatar_options = array('user_avatar', 'user_avatar_type', 'user_avatar_height', 'user_avatar_width');

	if (isset($sql_ary['user_avatar']))
	{
		$avatar_sql_ary = array();
		foreach ($avatar_options as $avatar_option)
		{
			if (isset($sql_ary[$avatar_option]))
			{
				$avatar_sql_ary[$avatar_option] = $sql_ary[$avatar_option];
				}
			}

		$sql = 'UPDATE ' . USERS_TABLE . '
			SET ' . $db->sql_build_array('UPDATE', $avatar_sql_ary) . "
			WHERE user_avatar = ''
				AND " . $db->sql_in_set('user_id', $user_id_ary);
		$db->sql_query($sql);
	}

	// Remove the avatar options, as we already updated them
	foreach ($avatar_options as $avatar_option)
	{
		unset($sql_ary[$avatar_option]);
	}

	if (!empty($sql_ary))
	{
		$sql = 'UPDATE ' . USERS_TABLE . '
			SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
			WHERE ' . $db->sql_in_set('user_id', $user_id_ary);
		$db->sql_query($sql);
	}

	if (isset($sql_ary['user_colour']))
	{
		// Update any cached colour information for these users
		$sql = 'UPDATE ' . FORUMS_TABLE . "
			SET forum_last_poster_colour = '" . $db->sql_escape($sql_ary['user_colour']) . "'
			WHERE " . $db->sql_in_set('forum_last_poster_id', $user_id_ary);
		$db->sql_query($sql);

		$sql = 'UPDATE ' . TOPICS_TABLE . "
			SET topic_first_poster_colour = '" . $db->sql_escape($sql_ary['user_colour']) . "'
			WHERE " . $db->sql_in_set('topic_poster', $user_id_ary);
		$db->sql_query($sql);

		$sql = 'UPDATE ' . TOPICS_TABLE . "
			SET topic_last_poster_colour = '" . $db->sql_escape($sql_ary['user_colour']) . "'
			WHERE " . $db->sql_in_set('topic_last_poster_id', $user_id_ary);
		$db->sql_query($sql);

		global $config;

		if (in_array($config['newest_user_id'], $user_id_ary))
		{
			set_config('newest_user_colour', $sql_ary['user_colour'], true);
		}
	}

	// Make all values available for the event
	$sql_ary = $updated_sql_ary;

	/**
	* Event when the default group is set for an array of users
	*
	* @event core.user_set_default_group
	* @var	int		group_id			ID of the group
	* @var	array	user_id_ary			IDs of the users
	* @var	array	group_attributes	Group attributes which were changed
	* @var	array	update_listing		Update the list of moderators and foes
	* @var	array	sql_ary				User attributes which were changed
	* @since 3.1.0-a1
	*/
	$vars = array('group_id', 'user_id_ary', 'group_attributes', 'update_listing', 'sql_ary');
	extract($phpbb_dispatcher->trigger_event('core.user_set_default_group', compact($vars)));

	if ($update_listing)
	{
		group_update_listings($group_id);
	}

	// Because some tables/caches use usercolour-specific data we need to purge this here.
	$phpbb_container->get('cache.driver')->destroy('sql', MODERATOR_CACHE_TABLE);
}

/**
* Get group name
*/
function get_group_name($group_id)
{
	global $db, $user;

	$sql = 'SELECT group_name, group_type
		FROM ' . GROUPS_TABLE . '
		WHERE group_id = ' . (int) $group_id;
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if (!$row || ($row['group_type'] == GROUP_SPECIAL && empty($user->lang)))
	{
		return '';
	}

	return ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
}

/**
* Obtain either the members of a specified group, the groups the specified user is subscribed to
* or checking if a specified user is in a specified group. This function does not return pending memberships.
*
* Note: Never use this more than once... first group your users/groups
*/
function group_memberships($group_id_ary = false, $user_id_ary = false, $return_bool = false)
{
	global $db;

	if (!$group_id_ary && !$user_id_ary)
	{
		return true;
	}

	if ($user_id_ary)
	{
		$user_id_ary = (!is_array($user_id_ary)) ? array($user_id_ary) : $user_id_ary;
	}

	if ($group_id_ary)
	{
		$group_id_ary = (!is_array($group_id_ary)) ? array($group_id_ary) : $group_id_ary;
	}

	$sql = 'SELECT ug.*, u.username, u.username_clean, u.user_email
		FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
		WHERE ug.user_id = u.user_id
			AND ug.user_pending = 0 AND ';

	if ($group_id_ary)
	{
		$sql .= ' ' . $db->sql_in_set('ug.group_id', $group_id_ary);
	}

	if ($user_id_ary)
	{
		$sql .= ($group_id_ary) ? ' AND ' : ' ';
		$sql .= $db->sql_in_set('ug.user_id', $user_id_ary);
	}

	$result = ($return_bool) ? $db->sql_query_limit($sql, 1) : $db->sql_query($sql);

	$row = $db->sql_fetchrow($result);

	if ($return_bool)
	{
		$db->sql_freeresult($result);
		return ($row) ? true : false;
	}

	if (!$row)
	{
		return false;
	}

	$return = array();

	do
	{
		$return[] = $row;
	}
	while ($row = $db->sql_fetchrow($result));

	$db->sql_freeresult($result);

	return $return;
}

/**
* Re-cache moderators and foes if group has a_ or m_ permissions
*/
function group_update_listings($group_id)
{
	global $db, $cache, $auth;

	$hold_ary = $auth->acl_group_raw_data($group_id, array('a_', 'm_'));

	if (!sizeof($hold_ary))
	{
		return;
	}

	$mod_permissions = $admin_permissions = false;

	foreach ($hold_ary as $g_id => $forum_ary)
	{
		foreach ($forum_ary as $forum_id => $auth_ary)
		{
			foreach ($auth_ary as $auth_option => $setting)
			{
				if ($mod_permissions && $admin_permissions)
				{
					break 3;
				}

				if ($setting != ACL_YES)
				{
					continue;
				}

				if ($auth_option == 'm_')
				{
					$mod_permissions = true;
				}

				if ($auth_option == 'a_')
				{
					$admin_permissions = true;
				}
			}
		}
	}

	if ($mod_permissions)
	{
		if (!function_exists('phpbb_cache_moderators'))
		{
			global $phpbb_root_path, $phpEx;
			include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
		}
		phpbb_cache_moderators($db, $cache, $auth);
	}

	if ($mod_permissions || $admin_permissions)
	{
		if (!function_exists('phpbb_update_foes'))
		{
			global $phpbb_root_path, $phpEx;
			include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
		}
		phpbb_update_foes($db, $auth, array($group_id));
	}
}



/**
* Funtion to make a user leave the NEWLY_REGISTERED system group.
* @access public
* @param $user_id The id of the user to remove from the group
*/
function remove_newly_registered($user_id, $user_data = false)
{
	global $db;

	if ($user_data === false)
	{
		$sql = 'SELECT *
			FROM ' . USERS_TABLE . '
			WHERE user_id = ' . $user_id;
		$result = $db->sql_query($sql);
		$user_row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if (!$user_row)
		{
			return false;
		}
		else
		{
			$user_data  = $user_row;
		}
	}

	if (empty($user_data['user_new']))
	{
		return false;
	}

	$sql = 'SELECT group_id
		FROM ' . GROUPS_TABLE . "
		WHERE group_name = 'NEWLY_REGISTERED'
			AND group_type = " . GROUP_SPECIAL;
	$result = $db->sql_query($sql);
	$group_id = (int) $db->sql_fetchfield('group_id');
	$db->sql_freeresult($result);

	if (!$group_id)
	{
		return false;
	}

	// We need to call group_user_del here, because this function makes sure everything is correctly changed.
	// A downside for a call within the session handler is that the language is not set up yet - so no log entry
	group_user_del($group_id, $user_id);

	// Set user_new to 0 to let this not be triggered again
	$sql = 'UPDATE ' . USERS_TABLE . '
		SET user_new = 0
		WHERE user_id = ' . $user_id;
	$db->sql_query($sql);

	// The new users group was the users default group?
	if ($user_data['group_id'] == $group_id)
	{
		// Which group is now the users default one?
		$sql = 'SELECT group_id
			FROM ' . USERS_TABLE . '
			WHERE user_id = ' . $user_id;
		$result = $db->sql_query($sql);
		$user_data['group_id'] = $db->sql_fetchfield('group_id');
		$db->sql_freeresult($result);
	}

	return $user_data['group_id'];
}

/**
* Gets user ids of currently banned registered users.
*
* @param array $user_ids Array of users' ids to check for banning,
*						leave empty to get complete list of banned ids
* @param bool|int $ban_end Bool True to get users currently banned
* 						Bool False to only get permanently banned users
* 						Int Unix timestamp to get users banned until that time
* @return array	Array of banned users' ids if any, empty array otherwise
*/
function phpbb_get_banned_user_ids($user_ids = array(), $ban_end = true)
{
	global $db;

	$sql_user_ids = (!empty($user_ids)) ? $db->sql_in_set('ban_userid', $user_ids) : 'ban_userid <> 0';

	// Get banned User ID's
	// Ignore stale bans which were not wiped yet
	$banned_ids_list = array();
	$sql = 'SELECT ban_userid
		FROM ' . BANLIST_TABLE . "
		WHERE $sql_user_ids
			AND ban_exclude <> 1";

	if ($ban_end === true)
	{
		// Banned currently
		$sql .= " AND (ban_end > " . time() . '
				OR ban_end = 0)';
	}
	else if ($ban_end === false)
	{
		// Permanently banned
		$sql .= " AND ban_end = 0";
	}
	else
	{
		// Banned until a specified time
		$sql .= " AND (ban_end > " . (int) $ban_end . '
				OR ban_end = 0)';
	}

	$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
		$user_id = (int) $row['ban_userid'];
		$banned_ids_list[$user_id] = $user_id;
	}
	$db->sql_freeresult($result);

	return $banned_ids_list;
}

/**
* Function for assigning a template var if the zebra module got included
*/
function _module_zebra($mode, &$module_row)
{
	global $template;

	$template->assign_var('S_ZEBRA_ENABLED', true);

	if ($mode == 'friends')
	{
		$template->assign_var('S_ZEBRA_FRIENDS_ENABLED', true);
	}

	if ($mode == 'foes')
	{
		$template->assign_var('S_ZEBRA_FOES_ENABLED', true);
	}
}