projects
/
NeonServV5.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed modcmd privs parsing and extended merge_argv
[NeonServV5.git]
/
modcmd.c
diff --git
a/modcmd.c
b/modcmd.c
index 7c1b0c5ec9a0f7b38afe0c8583143249e81c2c6e..dcf5cefc0097f3b44700a109057fa9ad21044f84 100644
(file)
--- a/
modcmd.c
+++ b/
modcmd.c
@@
-263,30
+263,28
@@
static void handle_command_async(struct ClientSocket *client, struct UserNode *u
int access_pos = 0;
int access_count = 0;
int minaccess = 0;
int access_pos = 0;
int access_count = 0;
int minaccess = 0;
- char *str_a, *str_b = cbind->func->channel_access;
+ char *str_a, *str_b = cbind->func->channel_access
, *str_c
;
if(cbind->flags & CMDFLAG_OVERRIDE_CHANNEL_ACCESS)
str_b = cbind->channel_access;
if(str_b) {
if(cbind->flags & CMDFLAG_OVERRIDE_CHANNEL_ACCESS)
str_b = cbind->channel_access;
if(str_b) {
- while((str_a = strstr(str_b, ","))) {
- *str_a = '\0';
- if(*str_b == '#') {
+ str_c = strdup(str_b);
+ str_b = str_c;
+ while((str_a = str_b)) {
+ str_b = strstr(str_a, ",");
+ if(str_b) {
+ *str_b = '\0';
str_b++;
str_b++;
- access_pos += sprintf(access_list+access_pos, ", `%s`", str_b);
+ }
+ if(*str_a == '#') {
+ str_a++;
+ access_pos += sprintf(access_list+access_pos, ", `%s`", str_a);
access_count++;
} else {
access_count++;
} else {
- if(atoi(str_
b
) > minaccess)
- minaccess = atoi(str_
b
);
+ if(atoi(str_
a
) > minaccess)
+ minaccess = atoi(str_
a
);
}
}
- *str_a = ',';
- str_b = str_a+1;
}
}
- if(*str_b == '#') {
- str_b++;
- access_pos += sprintf(access_list+access_pos, ", `%s`", str_b);
- access_count++;
- } else if(atoi(str_b) > minaccess)
- minaccess = atoi(str_b);
-
+ free(str_c);
} else
access_list[0] = '\0';
if(!(chan->flags & CHANFLAG_REQUESTED_CHANINFO) || (sent_chan && sent_chan == chan) || access_count || minaccess) {
} else
access_list[0] = '\0';
if(!(chan->flags & CHANFLAG_REQUESTED_CHANINFO) || (sent_chan && sent_chan == chan) || access_count || minaccess) {