diff options
author | trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b <trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2004-11-07 03:36:30 +0000 |
---|---|---|
committer | trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b <trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2004-11-07 03:36:30 +0000 |
commit | c58d37f49dfc674920ae2ccd93d6fd32df68544d (patch) | |
tree | cc978d68faceecbac0b087cd2a6e8218ca23643d | |
parent | b4489cffedcc217d72403f00c3087e446e4b7348 (diff) |
BUILD : 1.7.6 (439) BUGS : 68, 170, 209 NOTES : 1. DrSteins XOP patch (bug# 170), 2. Cleaned up the English language file for grammar (bug# 209), 3. Patch that fixes segfaults under NetBSD, 4. Cleaned up some places that could lead to segfaults, 5. DrSteins patch for NS ACCESS LIST, 6. Chanserv taking modes more than once (bug #68), 7. Fixed errors when doing "make" under some BSD systems, 8. Fixed syntax error when NSForceEmail is disabled
git-svn-id: svn://svn.anope.org/anope/trunk@439 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@294 5417fbe8-f217-4b02-8779-1006273d7864
-rw-r--r-- | Changes | 29 | ||||
-rw-r--r-- | Changes.lang | 2 | ||||
-rw-r--r-- | lang/Makefile | 34 | ||||
-rw-r--r-- | lang/cat.l | 4 | ||||
-rw-r--r-- | lang/de.l | 4 | ||||
-rw-r--r-- | lang/en_us.l | 26 | ||||
-rw-r--r-- | lang/es.l | 4 | ||||
-rw-r--r-- | lang/fr.l | 4 | ||||
-rw-r--r-- | lang/gr.l | 4 | ||||
-rw-r--r-- | lang/hun.l | 4 | ||||
-rw-r--r-- | lang/it.l | 4 | ||||
-rw-r--r-- | lang/nl.l | 4 | ||||
-rw-r--r-- | lang/pl.l | 4 | ||||
-rw-r--r-- | lang/pt.l | 4 | ||||
-rw-r--r-- | lang/ru.l | 4 | ||||
-rw-r--r-- | lang/tr.l | 4 | ||||
-rw-r--r-- | src/channels.c | 30 | ||||
-rw-r--r-- | src/chanserv.c | 13 | ||||
-rw-r--r-- | src/nickserv.c | 20 | ||||
-rw-r--r-- | src/proxy.c | 2 | ||||
-rw-r--r-- | src/servers.c | 4 | ||||
-rw-r--r-- | src/sessions.c | 2 | ||||
-rw-r--r-- | src/timeout.c | 11 | ||||
-rw-r--r-- | version.log | 10 |
24 files changed, 173 insertions, 58 deletions
@@ -28,21 +28,24 @@ Provided by Trystan <trystan@nomadirc.net> - 2004 10/05 A Globalized CS/NS STATUS messages [ #00] 10/02 A Added NewsCount as new feature in services.conf [ #00] 08/28 A CSupport for +I channel mode. [ #00] -08/28 A Complete support for Unreal3.2 [ #00] +08/28 A Complete support for Unreal3.2. [ #00] 08/28 A New BASE64 general library. [ #00] 09/07 A Unreal32 channel mode +T support. [ #00] 09/07 A Ircd CHANMODE now trapped and stored. [ #00] 08/23 A New protocol independent design (aka anope-capab). [ #00] 08/28 A New IRCD document for adding new ircd support to new design. [ #00] -10/31 F Fixes configure warning on BSD systems [#160] -10/30 F Fixed OS CLEARMODE, so the correct messages are sent [#207] -10/30 F Fixed MS INFO using the correct message [#205] -10/29 F Fixed CS CLEAR MODES not resetting the modes [#182] -10/29 F Fixed LogUser message, now normalizes the "realname" for display [#199] -10/29 F Fixed BS ACT, if the string contained control character 1 [#193] -10/27 F Fixed hardcored ircd sqlines from taking out services [#133] -10/27 F Fixed TOPIC timestamp not being read correctly [#196] -10/24 F Fixed OPNOTICE when doing /CS OP [#198] +11/06 F Fixed syntax error when NSForceEmail is disabled [ #00] +11/06 F Fixed using "make" under some BSD systems [ #00] +11/06 F Chanserv taking modes more than once. [ #68] +10/31 F Fixes configure warning on BSD systems. [#160] +10/30 F Fixed OS CLEARMODE, so the correct messages are sent. [#207] +10/30 F Fixed MS INFO using the correct message. [#205] +10/29 F Fixed CS CLEAR MODES not resetting the modes. [#182] +10/29 F Fixed LogUser message, now normalizes the "realname" for display. [#199] +10/29 F Fixed BS ACT, if the string contained control character 1. [#193] +10/27 F Fixed hardcored ircd sqlines from taking out services. [#133] +10/27 F Fixed TOPIC timestamp not being read correctly. [#196] +10/24 F Fixed OPNOTICE when doing /CS OP. [#198] 10/20 F Updated Base64 Lib to fix Unreal NICKIP. [ #00] 10/16 F Fixed BS TTB. [#185] 10/16 F RestrictOperNicks is no longer case sensitive. [#190] @@ -73,8 +76,10 @@ Provided by Trystan <trystan@nomadirc.net> - 2004 08/28 F Buffer preparation for vsnprintf() call. [#158] Provided by DrStein <gacevedo@anope.org> - 2004 +11/06 A NS ACCESS LIST reports correctly that the list is empty [ #00] 10/05 A CS/NS INFO shows the expire time. [ #00] 10/05 A NS GLIST shows the expire time. [ #00] +11/06 F Service Admins can now modify the XOP list [#170] 10/29 F ChanServ XOP reordering fix [#187] 10/29 F ChanServ AKICK reordering fix [#201] 10/29 F ChanServ now requires a more obscure password [#202] @@ -89,6 +94,10 @@ Provided by DrStein <gacevedo@anope.org> - 2004 Provided by crazytoon <da.crew@gmx.net> - 2004 10/24 A Updated German language file [ #00] +Provided by Miles Nordin <carton@Ivy.NET> - 2004 +11/06 F Fixes segfault under NetBSD with channel names using i18n symbols [ #00] + + Anope Version 1.7.5 ------------------- Provided by Anope Dev. <dev@anope.org> - 2004 diff --git a/Changes.lang b/Changes.lang index e6611b8e7..627329b07 100644 --- a/Changes.lang +++ b/Changes.lang @@ -23,6 +23,8 @@ Anope Version 1.7.6 NICK_GLIST_REPLY NICK_GLIST_REPLY_ADMIN CHAN_INFO_EXPIRE + NICK_ACCESS_LIST_EMPTY + NICK_ACCESS_LIST_X_EMPTY *** Mod Strings: diff --git a/lang/Makefile b/lang/Makefile index 3c7849284..a302e6d9a 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -18,22 +18,24 @@ all: $(LANGOBJS) distclean: clean spotless install: all - mkdir -p $(DATDEST)/languages -ifdef RUNGROUP - chgrp $(RUNGROUP) $(DATDEST)/languages - chmod 770 $(DATDEST)/languages -else - chmod 700 $(DATDEST)/languages -endif - cp $(LANGOBJS) $(DATDEST)/languages -ifdef RUNGROUP - chgrp $(RUNGROUP) $(DATDEST)/languages/* - chmod 660 $(DATDEST)/languages/* -else - chmod 600 $(DATDEST)/languages/* -endif - - + test -d $(DATDEST)/languages || mkdir $(DATDEST)/languages + @if [ "$(RUNGROUP)" ] ; then \ + echo chgrp -R $(RUNGROUP) $(DATDEST)/languages ; \ + chgrp -R $(RUNGROUP) $(DATDEST)/languages ; \ + echo chmod -R g+rw $(DATDEST)/languages ; \ + chmod -R g+rw $(DATDEST)/languages ; \ + $(CP) $(LANGOBJS) $(DATDEST)/languages ; \ + echo chgrp -R $(RUNGROUP) $(DATDEST)/languages ; \ + chgrp -R $(RUNGROUP) $(DATDEST)/languages/* ; \ + echo chmod -R g+rw $(DATDEST)/languages/* ; \ + chmod -R g+rw $(DATDEST)/languages/* ; \ + fi + @if [ ! "$(RUNGROUP)" ] ; then \ + chmod 700 $(DATDEST)/languages/ ; \ + $(CP) $(LANGOBJS) $(DATDEST)/languages ; \ + chmod 600 $(DATDEST)/languages/* ; \ + fi + clean: rm -f $(LANGOBJS) langcomp diff --git a/lang/cat.l b/lang/cat.l index ff9590dff..d17bea766 100644 --- a/lang/cat.l +++ b/lang/cat.l @@ -550,6 +550,10 @@ NICK_ACCESS_LIST Lllista d'accés: NICK_ACCESS_LIST_X Lllista d'accés per %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -570,6 +570,10 @@ NICK_ACCESS_LIST Access-Liste: NICK_ACCESS_LIST_X Access-List von %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 diff --git a/lang/en_us.l b/lang/en_us.l index 291e89301..251eeee47 100644 --- a/lang/en_us.l +++ b/lang/en_us.l @@ -540,6 +540,10 @@ NICK_ACCESS_LIST Access list: NICK_ACCESS_LIST_X Access list for %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -589,7 +593,7 @@ NICK_INFO_GREET NICK_INFO_OPTIONS Options: %s NICK_INFO_EXPIRE - Expires in: %s + Expires on: %s # These strings MUST NOT be empty NICK_INFO_OPT_KILL Protection @@ -1394,7 +1398,7 @@ CHAN_INFO_OPT_NONE CHAN_INFO_MODE_LOCK Mode lock: %s CHAN_INFO_EXPIRE - Expires in: %s + Expires on: %s CHAN_INFO_NO_EXPIRE This channel will not expire. @@ -2573,29 +2577,29 @@ OPER_SET_IGNORE_OFF OPER_SET_IGNORE_ERROR Setting for IGNORE must be ON or OFF. OPER_SET_READONLY_ON - Services is now in read-only mode. + Services are now in read-only mode. OPER_SET_READONLY_OFF - Services is now in read-write mode. + Services are now in read-write mode. OPER_SET_READONLY_ERROR Setting for READONLY must be ON or OFF. OPER_SET_LOGCHAN_ON - Services is now reporting log messages to %s. + Services are now reporting log messages to %s. OPER_SET_LOGCHAN_OFF - Services is no longer reporting log messages to a channel. + Services are no longer reporting log messages to a channel. OPER_SET_LOGCHAN_ERROR Setting for LOGCHAN must be ON or OFF and LogChannel must be defined. OPER_SET_DEBUG_ON - Services is now in debug mode. + Services are now in debug mode. OPER_SET_DEBUG_OFF - Services is now in non-debug mode. + Services are now in non-debug mode. OPER_SET_DEBUG_LEVEL - Services is now in debug mode (level %d). + Services are now in debug mode (level %d). OPER_SET_DEBUG_ERROR Setting for DEBUG must be ON, OFF, or a positive number. OPER_SET_NOEXPIRE_ON - Services is now in no expire mode. + Services are now in no expire mode. OPER_SET_NOEXPIRE_OFF - Services is now in expire mode. + Services are now in expire mode. OPER_SET_NOEXPIRE_ERROR Setting for NOEXPIRE must be ON or OFF. OPER_SET_UNKNOWN_OPTION @@ -554,6 +554,10 @@ NICK_ACCESS_LIST Lista de acceso: NICK_ACCESS_LIST_X Lista de acceso para %s: +NICK_ACCESS_LIST_EMPTY + Tu lista de acceso esta vacia. +NICK_ACCESS_LIST_X_EMPTY + La lista de acceso para %s esta vacia. # Status messages NICK_STATUS_0 @@ -552,6 +552,10 @@ NICK_ACCESS_LIST Liste d'accès: NICK_ACCESS_LIST_X Liste d'accès de %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -548,6 +548,10 @@ NICK_ACCESS_LIST Ëßóôá ðñüóâáóçò: NICK_ACCESS_LIST_X Ëßóôá ðñüóâáóçò ãéá %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 diff --git a/lang/hun.l b/lang/hun.l index 2ee18e29a..3f31a8010 100644 --- a/lang/hun.l +++ b/lang/hun.l @@ -547,6 +547,10 @@ NICK_ACCESS_LIST Hozzáférési lista: NICK_ACCESS_LIST_X %s hozzáférési listája: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -549,6 +549,10 @@ NICK_ACCESS_LIST Lista di accesso: NICK_ACCESS_LIST_X Lista di accesso di %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -551,6 +551,10 @@ NICK_ACCESS_LIST Toegangslijst: NICK_ACCESS_LIST_X Toegangslijst voor %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -601,6 +601,10 @@ NICK_ACCESS_LIST Lista dostêpu: NICK_ACCESS_LIST_X Lista dostêpu dla %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -548,6 +548,10 @@ NICK_ACCESS_LIST Lista de acesso: NICK_ACCESS_LIST_X Lista de acesso para %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -548,6 +548,10 @@ NICK_ACCESS_LIST Ñïèñîê äîñòóïà: NICK_ACCESS_LIST_X Ñïèñîê äîñòóïà äëÿ %s: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 @@ -554,6 +554,10 @@ NICK_ACCESS_LIST Access listesi: NICK_ACCESS_LIST_X %s nickinin access listesi: +NICK_ACCESS_LIST_EMPTY + Your access list is empty. +NICK_ACCESS_LIST_X_EMPTY + Access list for %s is empty. # Status messages NICK_STATUS_0 diff --git a/src/channels.c b/src/channels.c index 94cc880f8..eff7b5f96 100644 --- a/src/channels.c +++ b/src/channels.c @@ -235,10 +235,32 @@ void chan_set_modes(const char *source, Channel * chan, int ac, char **av, mode, chan->name, user->nick); if (add) { - if (check && cum->is_valid - && !cum->is_valid(user, chan, servermode)) - continue; - chan_set_user_status(chan, user, cum->status); + /* Fixes bug #68 + - might be a bit ugly but it works, the idea is that since the + is_valid function strips out all of the modes there is no point + in sending it over and over again + */ + if (check) { + if (check == 2 && cum->is_valid) { + if (debug) { + alog("debug: Modes already removed, calling remove_user_status() to clean up"); + } + chan_remove_user_status(chan, user, cum->status); + continue; + } else if (cum->is_valid + && !cum->is_valid(user, chan, servermode)) { + if (debug) { + alog("debug: Modes already sent calling remove_user_status() to clean up"); + } + chan_remove_user_status(chan, user, cum->status); + check = 2; + continue; + } else { + chan_set_user_status(chan, user, cum->status); + } + } else { + chan_set_user_status(chan, user, cum->status); + } } else { chan_remove_user_status(chan, user, cum->status); } diff --git a/src/chanserv.c b/src/chanserv.c index 46c06b930..8bdfed631 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -1971,7 +1971,8 @@ ChannelInfo *cs_findchan(const char *chan) return NULL; } - for (ci = chanlists[tolower(chan[1])]; ci; ci = ci->next) { + for (ci = chanlists[(unsigned char) tolower(chan[1])]; ci; + ci = ci->next) { if (stricmp(ci->name, chan) == 0) return ci; } @@ -2035,13 +2036,13 @@ void alpha_insert_chan(ChannelInfo * ci) chan = ci->name; - for (prev = NULL, ptr = chanlists[tolower(chan[1])]; + for (prev = NULL, ptr = chanlists[(unsigned char) tolower(chan[1])]; ptr != NULL && stricmp(ptr->name, chan) < 0; prev = ptr, ptr = ptr->next); ci->prev = prev; ci->next = ptr; if (!prev) - chanlists[tolower(chan[1])] = ci; + chanlists[(unsigned char) tolower(chan[1])] = ci; else prev->next = ci; if (ptr) @@ -2126,7 +2127,7 @@ int delchan(ChannelInfo * ci) if (ci->prev) ci->prev->next = ci->next; else - chanlists[tolower(ci->name[1])] = ci->next; + chanlists[(unsigned char) tolower(ci->name[1])] = ci->next; if (ci->desc) free(ci->desc); if (ci->mlock_key) @@ -3700,7 +3701,7 @@ static int do_xop(User * u, char *xname, int xlev, int *xmsgs) ulev = get_access(u, ci); - if (xlev >= ulev || ulev < ACCESS_AOP) { + if ((xlev >= ulev || ulev < ACCESS_AOP) && !is_servadmin) { notice_lang(s_ChanServ, u, PERMISSION_DENIED); return MOD_CONT; } @@ -3721,7 +3722,7 @@ static int do_xop(User * u, char *xname, int xlev, int *xmsgs) /** * Patch provided by PopCorn to prevert AOP's reducing SOP's levels **/ - if ((access->level >= ulev) && (!u->isSuperAdmin)) { + if ((access->level >= ulev) && (!is_servadmin)) { notice_lang(s_ChanServ, u, PERMISSION_DENIED); return MOD_CONT; } diff --git a/src/nickserv.c b/src/nickserv.c index 65ee90489..87a2228dc 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -2044,9 +2044,13 @@ static int do_register(User * u) } } - if (!pass || (NSForceEmail && !email)) { - syntax_error(s_NickServ, u, "REGISTER", - NICK_REGISTER_SYNTAX_EMAIL); + if (!pass) { + if (NSForceEmail && !email) { + syntax_error(s_NickServ, u, "REGISTER", + NICK_REGISTER_SYNTAX_EMAIL); + } else { + syntax_error(s_NickServ, u, "REGISTER", NICK_REGISTER_SYNTAX); + } } else if (time(NULL) < u->lastnickreg + NSRegDelay) { notice_lang(s_NickServ, u, NICK_REG_PLEASE_WAIT, NSRegDelay); } else if (u->na) { /* i.e. there's already such a nick regged */ @@ -3247,6 +3251,11 @@ static int do_access(User * u) if (cmd && stricmp(cmd, "LIST") == 0 && mask && is_services_admin(u) && (na = findnick(mask))) { + if (na->nc->accesscount == 0) { + notice_lang(s_NickServ, u, NICK_ACCESS_LIST_X_EMPTY, na->nick); + return MOD_CONT; + } + if (na->status & NS_VERBOTEN) { notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick); return MOD_CONT; @@ -3326,6 +3335,11 @@ static int do_access(User * u) na->nc->access = NULL; } } else if (stricmp(cmd, "LIST") == 0) { + if (na->nc->accesscount == 0) { + notice_lang(s_NickServ, u, NICK_ACCESS_LIST_EMPTY, u->nick); + return MOD_CONT; + } + notice_lang(s_NickServ, u, NICK_ACCESS_LIST); for (access = na->nc->access, i = 0; i < na->nc->accesscount; access++, i++) { diff --git a/src/proxy.c b/src/proxy.c index 757bf2bd9..0a6ff0d84 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -234,7 +234,7 @@ int proxy_check(char *nick, char *host, uint32 ip) for (message = ProxyMessage, i = 0; i < 8 && *message && **message; message++, i++) - notice(s_GlobalNoticer, nick, *message); + notice(s_GlobalNoticer, nick, "%s", *message); hc = proxy_cache_add(host); if (ircd->nickip) { diff --git a/src/servers.c b/src/servers.c index c32aadac0..d77dc4713 100644 --- a/src/servers.c +++ b/src/servers.c @@ -183,6 +183,10 @@ Server *findserver(Server * s, const char *name) { Server *sl; + if (!name || !*name) { + return NULL; + } + if (debug >= 3) alog("debug: findserver(%p)", name); while (s && (stricmp(s->name, name) != 0)) { diff --git a/src/sessions.c b/src/sessions.c index 37744a967..30edad494 100644 --- a/src/sessions.c +++ b/src/sessions.c @@ -240,7 +240,7 @@ int add_session(char *nick, char *host) if (SessionLimitExceeded) notice(s_OperServ, nick, SessionLimitExceeded, host); if (SessionLimitDetailsLoc) - notice(s_OperServ, nick, SessionLimitDetailsLoc); + notice(s_OperServ, nick, "%s", SessionLimitDetailsLoc); /* We don't use kill_user() because a user stucture has not yet * been created. Simply kill the user. -TheShadow diff --git a/src/timeout.c b/src/timeout.c index f71e16cac..bd7af4c8c 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -27,14 +27,15 @@ int send_timeout_list(User * u) { Timeout *to, *last; - notice(s_OperServ, u->nick, "Now: %ld", time(NULL)); + notice(s_OperServ, u->nick, "Now: %ld", (long int) time(NULL)); for (to = timeouts, last = NULL; to; last = to, to = to->next) { - notice(s_OperServ, u->nick, "%p: %ld: %p (%p)", - to, to->timeout, to->code, to->data); + notice(s_OperServ, u->nick, "0x%p: %ld: 0x%p (0x%p)", + (void *) to, (long int) to->timeout, (void *) to->code, + (void *) to->data); if (to->prev != last) notice(s_OperServ, u->nick, - " to->prev incorrect! expected=%p seen=%p", - last, to->prev); + " to->prev incorrect! expected=0x%p seen=0x%p", + (void *) last, (void *) to->prev); } return MOD_CONT; } diff --git a/version.log b/version.log index 921e89895..44730dba8 100644 --- a/version.log +++ b/version.log @@ -8,10 +8,18 @@ VERSION_MAJOR="1" VERSION_MINOR="7" VERSION_PATCH="6" -VERSION_BUILD="438" +VERSION_BUILD="439" # $Log$ # +# BUILD : 1.7.6 (439) +# BUGS : 68, 170, 209 +# NOTES : 1. DrSteins XOP patch (bug# 170), 2. Cleaned up the English language file for grammar (bug# 209), +# 3. Patch that fixes segfaults under NetBSD, 4. Cleaned up some places that could lead to segfaults, +# 5. DrSteins patch for NS ACCESS LIST, 6. Chanserv taking modes more than once (bug #68), +# 7. Fixed errors when doing "make" under some BSD systems, 8. Fixed syntax error when NSForceEmail is disabled +# +# # BUILD : 1.7.6 (438) # BUGS : 160 # NOTES : configure warning about sysproto.h resolved |