summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes1
-rw-r--r--nickserv.c33
-rw-r--r--version.log6
3 files changed, 29 insertions, 11 deletions
diff --git a/Changes b/Changes
index 88679425e..1b69751aa 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
Anope Version 1.7.x (will be renamed when next release is produced)
-------------------
Provided by Anope Dev. <dev@anope.org>
+2004/04/22 Fixed ALIST bug when being invoked by systems admins (Bug #20)
2004/04/19 Added /bin/anoperc anope console control script
Anope Version 1.7.2
diff --git a/nickserv.c b/nickserv.c
index 1eb64fc62..e0a10b692 100644
--- a/nickserv.c
+++ b/nickserv.c
@@ -3581,23 +3581,36 @@ static int do_glist(User * u)
*/
static int do_alist(User * u)
{
- char *lev = strtok(NULL, " ");
+ char *nick = NULL;
+ char *lev = NULL;
NickAlias *na;
int min_level = 0;
int is_servadmin = is_services_admin(u);
- /* Services admins can request ALIST on nicks.
- * Check if 'lev' (first token) is actually a nick
- * and, if so, reassign pointers.
- */
- if (is_servadmin && lev && (na = findnick(lev))) {
- lev = strtok(NULL, " ");
- } else {
+ if (!is_servadmin) {
+ /* Non service admins can only see their own levels */
na = u->na;
+ } else {
+ /* Services admins can request ALIST on nicks.
+ * The first argument for service admins must
+ * always be a nickname.
+ */
+ nick = strtok(NULL, " ");
+
+ /* If an argument was passed, use it as the nick to see levels
+ * for, else check levels for the user calling the command */
+ if (nick) {
+ na = findnick(nick);
+ } else {
+ na = u->na;
+ }
}
+ /* If available, get level from arguments */
+ lev = strtok(NULL, " ");
+
/* if a level was given, make sure it's an int for later */
if (lev) {
if (stricmp(lev, "FOUNDER") == 0) {
@@ -3619,8 +3632,8 @@ static int do_alist(User * u)
if (!nick_identified(u)) {
notice_lang(s_NickServ, u, ACCESS_DENIED);
- } else if (lev && !na) {
- notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, na->nick);
+ } else if (is_servadmin && nick && !na) {
+ notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else {
diff --git a/version.log b/version.log
index 8230b0be5..5a0a377ba 100644
--- a/version.log
+++ b/version.log
@@ -8,11 +8,15 @@
VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="2"
-VERSION_BUILD="67"
+VERSION_BUILD="68"
VERSION_EXTRA=""
# $Log$
#
+# BUILD : 1.7.2 (68)
+# BUGS : 20
+# NOTES : Fixed ALIST bug when being invoked by systems admins
+#
# BUILD : 1.7.2 (67)
# BUGS : N/A
# NOTES : Bumped Changes file verisons ready for new updates