void do_greet(COMMAND_ARGS) { /* * on_msg checks: CARGS */ User *user; char *handle; int isfile; if ((handle = chop(&rest)) == NULL) goto usage; if ((user = find_handle(handle)) == NULL) { to_user(from,TEXT_UNKNOWNUSER,handle); return; } if (!usercanmodify(from,user)) { to_user(from,TEXT_USEROWNSYOU,user->name); return; } isfile = FALSE; if (*rest == '@' || *rest == '%') { isfile = *rest; rest++; while(*rest == ' ') rest++; } if (*rest) { if (isfile) { if (!is_safepath(rest)) goto usage; } user->x.x.greetfile = (isfile == '@') ? TRUE : FALSE; user->x.x.randline = (isfile == '%') ? TRUE : FALSE; set_mallocdoer(do_greet); user->greet = Strdup(rest); to_user(from,"greeting for user %s has been set to: %s%s",user->name,user->greet, (isfile == '@') ? " (file)" : ((isfile == '%') ? " (random line from file)" : "")); current->ul_save++; } else if (isfile) { goto usage; } else if (user->greet) { Free((char**)&user->greet); to_user(from,"greeting for user %s has been removed",user->name); current->ul_save++; } return; usage: usage(from); /* usage for CurrentCmd->name */ }
int begin_redirect(char *from, char *args) { char *pt,*nick; if (!args) return(0); pt = STRCHR(args,'>'); if (pt) { *pt = 0; nick = pt+1; pt--; while((pt > args) && (*pt == ' ')) { *pt = 0; pt--; } while(*nick == ' ') nick++; if (*nick) { #ifdef DEBUG debug("(begin_redirect) from %s --> %s\n",from,nick); #endif /* DEBUG */ if (ischannel(nick)) { if (find_channel_ac(nick)) { redirect.to = stringdup(nick); redirect.method = R_PRIVMSG; return(0); } else { to_user(from,ERR_CHAN,nick); return(-1); } } if (*nick == '>') { nick++; while(*nick == ' ') nick++; if (!*nick) { to_user(from,"Missing name for redirect."); return(-1); } if (is_safepath(nick,FILE_MAY_EXIST) != FILE_IS_SAFE) // redirect output is appended { to_user(from,"Bad filename."); return(-1); } redirect.to = stringdup(nick); redirect.method = R_FILE; return(0); } if ((pt = find_nuh(nick))) { redirect.to = stringdup(nick); redirect.method = R_NOTICE; return(0); } else { to_user(from,TEXT_UNKNOWNUSER,nick); return(-1); } } else { to_user(from,"Bad redirect"); return(-1); } } return(0); }
void do_help(COMMAND_ARGS) { char line[MSGLEN]; char *pt; int i,level,axs; int cur,nxt,count,ci,tl; int in; if (dcc_only_command(from)) return; axs = get_maxaccess(from); if (!*rest) { cur = -1; *line = 0; help_loop: count = 0; nxt = OWNERLEVEL; for(i=0;mcmd[i].name;i++) { tl = acmd[i]; if ((tl < nxt) && (tl > cur)) nxt = tl; if (tl != cur) continue; if (count == 0) sprintf(line,"\037Level %3i\037: ",cur); count++; } if (!count) { cur = nxt; goto help_loop; } ci = count; for(i=0;mcmd[i].name;i++) { tl = acmd[i]; if (tl != cur) continue; if (ci != count) Strcat(line,", "); print_help(from,line,strlen(mcmd[i].name)); if (*line == 0) Strcpy(line," "); Strcat(line,(char*)mcmd[i].name); count--; } print_help(from,line,500); if ((cur != OWNERLEVEL) && (nxt <= axs)) cur = nxt; else return; goto help_loop; } level = a2i(rest); if (!errno) { if ((level > axs) || (level < 0)) level = axs; to_user(from,"\037Commands available at Level %i:\037",level); *line = 0; ci = 0; for(i=0;mcmd[i].name;i++) { if (acmd[i] <= level) { if (ci != 0) Strcat(line,", "); ci++; print_help(from,line,strlen(mcmd[i].name)); Strcat(line,(char*)mcmd[i].name); } } if (ci) print_help(from,line,58); else to_user(from,TEXT_NONE); return; } if (STRCHR(rest,'*')) { line[0] = 0; ci = 0; to_user(from,"\037Commands that match query %s\037:",rest); for(i=0;mcmd[i].name;i++) { if ((!matches(rest,(char*)mcmd[i].name)) && (acmd[i] <= axs)) { if (ci != 0) Strcat(line,", "); ci++; print_help(from,line,strlen(mcmd[i].name)); Strcat(line,(char*)mcmd[i].name); } } if (ci) print_help(from,line,500); else to_user(from,TEXT_NONE); return; } /* * We dont want to show help for "../../../../../../etc/passwd" */ if (!is_safepath(rest)) return; pt = Strcpy(line,HELPDIR); for(i=0;(rest[i]);i++) { if (rest[i] >= 'a' && rest[i] <= 'z') *pt = rest[i] - 0x20; else *pt = rest[i]; pt++; } *pt = 0; #ifdef DEBUG debug("(do_help) help file check: %s\n",line); #endif /* DEBUG */ if ((in = open(line,O_RDONLY)) < 0) { to_user(from,"No help found for \"%s\"",rest); return; } #ifdef DEBUG debug("(do_help) helpfile for = '%s'\n",rest); #endif /* DEBUG */ table_buffer("\037Help on %s\037",rest); level = access_needed(rest); if (level > 200) table_buffer("Level needed: Command disabled"); else if (level > 0) table_buffer("Level needed: %i",level); for(i=0;ulist[i].command;i++) { if (!Strcasecmp(rest,ulist[i].command)) { pt = (ulist[i].usage) ? ulist[i].usage : ""; table_buffer("Usage: %s %s",ulist[i].command,pt); break; } } readline(in,&do_help_callback); /* readline closes in */ table_send(from,0); }