void set_user_flagrec(struct userrec *u, struct flag_record *fr, char *chname) { struct chanuserrec *cr = NULL; int oldflags = fr->match; char buffer[100]; struct chanset_t *ch; if (!u) return; if (oldflags & FR_GLOBAL) { u->flags = fr->global; u->flags_udef = fr->udef_global; if (!noshare && !(u->flags & USER_UNSHARED)) { fr->match = FR_GLOBAL; build_flags(buffer, fr, NULL); shareout(NULL, "a %s %s\n", u->handle, buffer); } } if ((oldflags & FR_BOT) && (u->flags & USER_BOT)) set_user(&USERENTRY_BOTFL, u, (void *) fr->bot); /* dont share bot attrs */ if ((oldflags & FR_CHAN) && chname) { for (cr = u->chanrec; cr; cr = cr->next) if (!rfc_casecmp(chname, cr->channel)) break; ch = findchan(chname); if (!cr && ch) { cr = user_malloc(sizeof(struct chanuserrec)); bzero(cr, sizeof(struct chanuserrec)); cr->next = u->chanrec; u->chanrec = cr; strncpy(cr->channel, chname, 80); cr->channel[80] = 0; } if (cr && ch) { cr->flags = fr->chan; cr->flags_udef = fr->udef_chan; if (!noshare && !(u->flags & USER_UNSHARED) && channel_shared(ch)) { fr->match = FR_CHAN; build_flags(buffer, fr, NULL); shareout(ch, "a %s %s %s\n", u->handle, buffer, chname); } } } fr->match = oldflags; }
void ObChunkServerMain::print_version() { fprintf(stderr, "chunkserver (%s %s)\n", PACKAGE_STRING, RELEASEID); fprintf(stderr, "SVN_VERSION: %s\n", svn_version()); fprintf(stderr, "BUILD_TIME: %s %s\n", build_date(), build_time()); fprintf(stderr, "BUILD_FLAGS: %s\n\n", build_flags()); fprintf(stderr, "Copyright (c) 2007-2011 Taobao Inc.\n"); }
static int tcl_setflags(ClientData cd, Tcl_Interp *irp, int argc, char *argv[]) { FILE *fdb; filedb_entry *fdbe; char *s = NULL, *p, *d; BADARGS(3, 4, " dir ?flags ?channel??"); malloc_strcpy(s, argv[1]); if (s[strlen(s) - 1] == '/') s[strlen(s) - 1] = 0; p = strrchr(s, '/'); if (p == NULL) { p = s; d = ""; } else { *p = 0; p++; d = s; } fdb = filedb_open(d, 0); if (!fdb) { Tcl_AppendResult(irp, "-3", NULL); /* filedb access failed */ my_free(s); return TCL_OK; } filedb_readtop(fdb, NULL); fdbe = filedb_matchfile(fdb, ftell(fdb), p); my_free(s); if (!fdbe) { Tcl_AppendResult(irp, "-1", NULL); /* No such dir */ return TCL_OK; } if (!(fdbe->stat & FILE_DIR)) { Tcl_AppendResult(irp, "-2", NULL); /* Not a dir */ return TCL_OK; } if (argc >= 3) { struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; char f[100]; break_down_flags(argv[2], &fr, NULL); build_flags(f, &fr, NULL); malloc_strcpy(fdbe->flags_req, f); } else my_free(fdbe->flags_req); if (argc == 4) malloc_strcpy(fdbe->chan, argv[3]); filedb_updatefile(fdb, fdbe->pos, fdbe, UPDATE_ALL); free_fdbe(&fdbe); filedb_close(fdb); Tcl_AppendResult(irp, "0", NULL); return TCL_OK; }
void set_user_flagrec(struct userrec *u, struct flag_record *fr, const char *chname) { if (!u) return; struct chanuserrec *cr = NULL; flag_t oldflags = fr->match; char buffer[100] = ""; struct chanset_t *ch; if (oldflags & FR_GLOBAL) { u->flags = fr->global; if (!noshare) { fr->match = FR_GLOBAL; build_flags(buffer, fr, NULL); shareout("a %s %s\n", u->handle, buffer); } } if ((oldflags & FR_CHAN) && chname) { for (cr = u->chanrec; cr; cr = cr->next) if (!rfc_casecmp(chname, cr->channel)) break; ch = findchan_by_dname(chname); if (!cr && ch) { cr = (struct chanuserrec *) my_calloc(1, sizeof(struct chanuserrec)); cr->next = u->chanrec; u->chanrec = cr; strlcpy(cr->channel, chname, sizeof cr->channel); } if (cr && ch) { cr->flags = fr->chan; if (!noshare) { fr->match = FR_CHAN; build_flags(buffer, fr, NULL); shareout("a %s %s %s\n", u->handle, buffer, chname); } } } fr->match = oldflags; }
static void botfl_display(int idx, struct user_entry *e) { struct flag_record fr = { FR_BOT, 0, 0, 0, 0, 0 }; char x[100]; fr.bot = e->u.ulong; build_flags(x, &fr, NULL); dprintf(idx, " BOT FLAGS: %s\n", x); }
static int botfl_tcl_get(Tcl_Interp *interp, struct userrec *u, struct user_entry *e, int argc, char **argv) { char x[100]; struct flag_record fr = { FR_BOT, 0, 0, 0, 0, 0 }; fr.bot = e->u.ulong; build_flags(x, &fr, NULL); Tcl_AppendResult(interp, x, NULL); return TCL_OK; }
static int botfl_pack(struct userrec *u, struct user_entry *e) { char x[100]; struct flag_record fr = {FR_BOT, 0, 0, 0, 0, 0}; fr.bot = e->u.ulong; e->u.list = user_malloc(sizeof(struct list_type)); e->u.list->next = NULL; e->u.list->extra = user_malloc (build_flags (x, &fr, NULL) + 1); strcpy(e->u.list->extra, x); return 1; }
static int botfl_write_userfile(FILE *f, struct userrec *u, struct user_entry *e) { char x[100]; struct flag_record fr = { FR_BOT, 0, 0, 0, 0, 0 }; fr.bot = e->u.ulong; build_flags(x, &fr, NULL); if (fprintf(f, "--%s %s\n", e->type->name, x) == EOF) return 0; return 1; }
void ObUpdateServerMain::print_version() { fprintf(stderr, "updateserver (%s %s)\n", PACKAGE_STRING, RELEASEID); fprintf(stderr, "SVN_VERSION: %s\n", svn_version()); fprintf(stderr, "BUILD_TIME: %s %s\n", build_date(), build_time()); fprintf(stderr, "BUILD_FLAGS: %s\n\n", build_flags()); #ifdef _BTREE_ENGINE_ fprintf(stderr, "Using Btree Key-Value Engine.\n"); #else fprintf(stderr, "Using Hash Key-Value Engine.\n"); #endif fprintf(stderr, "Copyright (c) 2007-2011 Taobao Inc.\n"); }
/* Show all internal state variables */ void tell_settings(int idx) { char s[1024] = ""; struct flag_record fr = {FR_GLOBAL, 0, 0, 0 }; dprintf(idx, "Botnet Nickname: %s\n", conf.bot->nick); if (conf.bot->hub) dprintf(idx, "Userfile: %s \n", userfile); dprintf(idx, "Directories:\n"); dprintf(idx, " Temp : %s\n", tempdir); fr.global = default_flags; build_flags(s, &fr, NULL); dprintf(idx, "New users get flags [%s]\n", s); if (conf.bot->hub && owner[0]) dprintf(idx, "Permanent owner(s): %s\n", owner); dprintf(idx, "Ignores last %d mins\n", ignore_time); }
/* Show all internal state variables */ void tell_settings(int idx) { char s[1024]; int i; struct flag_record fr = { FR_GLOBAL, 0, 0, 0, 0, 0 }; dprintf(idx, "Botnet nickname: %s\n", botnetnick); if (firewall[0]) dprintf(idx, "Firewall: %s:%d\n", firewall, firewallport); dprintf(idx, "Userfile: %s\n", userfile); dprintf(idx, "Motd: %s\n", motdfile); dprintf(idx, "Directories:\n"); #ifndef STATIC dprintf(idx, " Help : %s\n", helpdir); dprintf(idx, " Temp : %s\n", tempdir); dprintf(idx, " Modules: %s\n", moddir); #else dprintf(idx, " Help: %s\n", helpdir); dprintf(idx, " Temp: %s\n", tempdir); #endif fr.global = default_flags; build_flags(s, &fr, NULL); dprintf(idx, "%s [%s], %s: %s\n", MISC_NEWUSERFLAGS, s, MISC_NOTIFY, notify_new); if (owner[0]) dprintf(idx, "%s: %s\n", MISC_PERMOWNER, owner); for (i = 0; i < max_logs; i++) if (logs[i].filename != NULL) { dprintf(idx, "Logfile #%d: %s on %s (%s: %s)\n", i + 1, logs[i].filename, logs[i].chname, masktype(logs[i].mask), maskname(logs[i].mask)); } dprintf(idx, "Ignores last %d minute%s.\n", ignore_time, (ignore_time != 1) ? "s" : ""); }
void tell_binds(int idx, char *par) { tcl_bind_list_t *tl, *tl_kind; tcl_bind_mask_t *tm; int fnd = 0, showall = 0, patmatc = 0; tcl_cmd_t *tc; char *name, *proc, *s, flg[100]; if (par[0]) name = newsplit(&par); else name = NULL; if (par[0]) s = newsplit(&par); else s = NULL; if (name) tl_kind = find_bind_table(name); else tl_kind = NULL; if ((name && name[0] && !egg_strcasecmp(name, "all")) || (s && s[0] && !egg_strcasecmp(s, "all"))) showall = 1; if (tl_kind == NULL && name && name[0] && egg_strcasecmp(name, "all")) patmatc = 1; dprintf(idx, MISC_CMDBINDS); dprintf(idx, " TYPE FLGS COMMAND HITS BINDING (TCL)\n"); for (tl = tl_kind ? tl_kind : bind_table_list; tl; tl = tl_kind ? 0 : tl->next) { if (tl->flags & HT_DELETED) continue; for (tm = tl->first; tm; tm = tm->next) { if (tm->flags & TBM_DELETED) continue; for (tc = tm->first; tc; tc = tc->next) { if (tc->attributes & TC_DELETED) continue; proc = tc->func_name; build_flags(flg, &(tc->flags), NULL); if (showall || proc[0] != '*') { int ok = 0; if (patmatc == 1) { if (wild_match_per(name, tl->name) || wild_match_per(name, tm->mask) || wild_match_per(name, tc->func_name)) ok = 1; } else ok = 1; if (ok) { dprintf(idx, " %-4s %-8s %-20s %4d %s\n", tl->name, flg, tm->mask, tc->hits, tc->func_name); fnd = 1; } } } } } if (!fnd) { if (patmatc) dprintf(idx, "No command bindings found that match %s\n", name); else if (tl_kind) dprintf(idx, "No command bindings for type: %s.\n", name); else dprintf(idx, "No command bindings exist.\n"); } }
/* return 1 if i find a '.files' and convert it */ static int convert_old_db(char *path, char *newfiledb) { FILE *f, *g; char s[256], *fn, *nick, *tm, *s1 = s; filedb fdb; int in_file = 0, i; long where; struct stat st; sprintf(s, "%s/.files", path); f = fopen(s, "r"); if (f == NULL) return 0; g = fopen(newfiledb, "w+b"); if (g == NULL) { putlog(LOG_MISC, "(!) Can't create filedb in %s", newfiledb); fclose(f); return 0; } putlog(LOG_FILES, "*", FILES_CONVERT, path); where = ftell(g); /* scan contents of .files and painstakingly create .filedb entries */ while (!feof(f)) { fgets(s, 120, f); if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = 0; if (!feof(f)) { fn = newsplit(&s1); rmspace(fn); if ((fn[0]) && (fn[0] != ';') && (fn[0] != '#')) { /* not comment */ if (fn[0] == '-') { /* adjust comment for current file */ if (in_file) { rmspace(s); if (strlen(s) + strlen(fdb.desc) <= 600) { strcat(fdb.desc, "\n"); strcat(fdb.desc, s); fseek(g, where, SEEK_SET); fwrite(&fdb, sizeof(filedb), 1, g); } } } else { in_file = 1; where = ftell(g); nick = newsplit(&s1); rmspace(nick); tm = newsplit(&s1); rmspace(tm); rmspace(s1); i = strlen(fn) - 1; if (fn[i] == '/') fn[i] = 0; fdb.version = FILEVERSION; fdb.stat = 0; fdb.desc[0] = 0; fdb.chname[0] = 0; fdb.flags_req[0] = 0; strcpy(fdb.filename, fn); strcpy(fdb.uploader, nick); fdb.gots = atoi(s1); fdb.sharelink[0] = 0; fdb.uploaded = atoi(tm); sprintf(s, "%s/%s", path, fn); if (stat(s, &st) == 0) { /* file is okay */ if (S_ISDIR(st.st_mode)) { fdb.stat |= FILE_DIR; if (nick[0] == '+') { char x[100]; /* only do global flags, it's an old one */ struct flag_record fr = {FR_GLOBAL, 0, 0, 0, 0, 0}; break_down_flags(nick + 1, &fr, NULL); build_flags(x, &fr, NULL); /* we only want valid flags */ strncpy(fdb.flags_req, x, 21); fdb.flags_req[21] = 0; } } fdb.size = st.st_size; fwrite(&fdb, sizeof(filedb), 1, g); } else in_file = 0; /* skip */ } } } } fseek(g, 0, SEEK_END); fclose(g); fclose(f); return 1; }
/* Convert '.files' db to newest db. Returns 1 if a valid file is * found and could be converted, 0 in all other cases. * * '.files' is a text file which contains file records built up in the * following way: * '<filename> <nick> <tm> <gots>\n' * '- <comment>\n' * '- <comment>\n' * ... */ static int convert_old_files(char *path, char *newfiledb) { FILE *f, *fdb; char *s, *fn, *nick, *tm, *s1; filedb_entry *fdbe = NULL; int in_file = 0, i; struct stat st; s = nmalloc(strlen(path) + 8); sprintf(s, "%s/.files", path); f = fopen(s, "r"); my_free(s); if (f == NULL) return 0; fdb = fopen(newfiledb, "w+b"); if (!fdb) { putlog(LOG_MISC, "(!) Can't create filedb in %s", newfiledb); fclose(f); return 0; } lockfile(fdb); lockfile(f); filedb_initdb(fdb); putlog(LOG_FILES, "*", FILES_CONVERT, path); /* Scan contents of .files and painstakingly create .filedb entries */ while (!feof(f)) { s = nmalloc(121); s1 = s; fgets(s, 120, f); if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = 0; if (!feof(f)) { fn = newsplit(&s1); rmspace(fn); if ((fn[0]) && (fn[0] != ';') && (fn[0] != '#')) { /* Not comment */ if (fn[0] == '-') { /* Adjust comment for current file */ if (in_file && fdbe) { rmspace(s); if (fdbe->desc) { fdbe->desc = nrealloc(fdbe->desc, strlen(fdbe->desc) + strlen(s) + 2); strcat(fdbe->desc, "\n"); } else fdbe->desc = nmalloc(strlen(s) + 2); strcat(fdbe->desc, s); } } else { if (fdbe) { /* File pending. Write to DB */ filedb_addfile(fdb, fdbe); free_fdbe(&fdbe); } fdbe = malloc_fdbe(); in_file = 1; nick = newsplit(&s1); rmspace(nick); tm = newsplit(&s1); rmspace(tm); rmspace(s1); i = strlen(fn) - 1; if (fn[i] == '/') fn[i] = 0; malloc_strcpy(fdbe->filename, fn); malloc_strcpy(fdbe->uploader, nick); fdbe->gots = atoi(s1); fdbe->uploaded = atoi(tm); sprintf(s, "%s/%s", path, fn); if (stat(s, &st) == 0) { /* File is okay */ if (S_ISDIR(st.st_mode)) { fdbe->stat |= FILE_DIR; if (nick[0] == '+') { char x[100]; /* Only do global flags, it's an old one */ struct flag_record fr = { FR_GLOBAL, 0, 0, 0, 0, 0 }; break_down_flags(nick + 1, &fr, NULL); build_flags(x, &fr, NULL); /* We only want valid flags */ malloc_strcpy_nocheck(fdbe->flags_req, x); } } fdbe->size = st.st_size; } else in_file = 0; /* skip */ } } } my_free(s); } if (fdbe) { /* File pending. Write to DB */ filedb_addfile(fdb, fdbe); free_fdbe(&fdbe); } fseek(fdb, 0L, SEEK_END); unlockfile(f); unlockfile(fdb); fclose(fdb); fclose(f); return 1; }
static int tcl_mkdir(ClientData cd, Tcl_Interp *irp, int argc, char *argv[]) { FILE *fdb; filedb_entry *fdbe; char *s = NULL, *t, *d, *p; struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; BADARGS(2, 4, " dir ?required-flags ?channel??"); malloc_strcpy(s, argv[1]); if (s[strlen(s) - 1] == '/') s[strlen(s) - 1] = 0; p = strrchr(s, '/'); if (p == NULL) { p = s; d = ""; } else { *p = 0; p++; d = s; } fdb = filedb_open(d, 0); if (!fdb) { Tcl_AppendResult(irp, "-3", NULL); /* filedb access failed */ my_free(s); return TCL_OK; } filedb_readtop(fdb, NULL); fdbe = filedb_matchfile(fdb, ftell(fdb), p); if (!fdbe) { t = nmalloc(strlen(dccdir) + strlen(d) + strlen(p) + 2); sprintf(t, "%s%s/%s", dccdir, d, p); if (mkdir(t, 0755) != 0) { Tcl_AppendResult(irp, "1", NULL); my_free(t); my_free(s); filedb_close(fdb); return TCL_OK; } fdbe = malloc_fdbe(); fdbe->stat = FILE_DIR; malloc_strcpy(fdbe->filename, argv[1]); fdbe->uploaded = now; } else if (!(fdbe->stat & FILE_DIR)) { Tcl_AppendResult(irp, "2", NULL); free_fdbe(&fdbe); my_free(s); filedb_close(fdb); return TCL_OK; } if (argc >= 3) { char f[100]; break_down_flags(argv[2], &fr, NULL); build_flags(f, &fr, NULL); malloc_strcpy(fdbe->flags_req, f); } else if (fdbe->flags_req) { my_free(fdbe->flags_req); } if (argc == 4) { malloc_strcpy(fdbe->chan, argv[3]); } else if (fdbe->chan) my_free(fdbe->chan); if (!fdbe->pos) fdbe->pos = POS_NEW; filedb_updatefile(fdb, fdbe->pos, fdbe, UPDATE_ALL); filedb_close(fdb); free_fdbe(&fdbe); Tcl_AppendResult(irp, "0", NULL); return TCL_OK; }