- Timestamp:
- Mar 7, 2014, 5:37:37 PM (11 years ago)
- Branches:
- master
- Children:
- 709589d
- Parents:
- 9c04f2a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
icbd.c
r9c04f2a r82d3c1f 44 44 45 45 uint64_t sessionid; 46 struct stat modtabst; 46 47 char modtabpath[MAXPATHLEN]; 47 48 char modtab[ICB_MTABLEN][ICB_MAXNICKLEN]; … … 64 65 void icbd_log(struct icb_session *, int, const char *, ...); 65 66 void icbd_grplist(char *); 66 void icbd_modtab(char *);67 67 void icbd_restrict(void); 68 68 void icbd_write(struct icb_session *, char *, ssize_t); 69 void icbd_signal(int);70 69 71 70 static inline int icbd_session_cmp(struct icb_session *, struct icb_session *); … … 82 81 main(int argc, char *argv[]) 83 82 { 84 struct event ev_sig;85 83 struct icbd_callbacks ic = { icbd_drop, icbd_log, icbd_write }; 86 84 const char *cause = NULL; … … 239 237 icbd_restrict(); 240 238 239 icbd_modupdate(); 240 241 241 (void)signal(SIGPIPE, SIG_IGN); 242 if (strlen(modtabpath) > 0) {243 icbd_modtab(modtabpath);244 signal_set(&ev_sig, SIGHUP,245 (void (*)(int, short, void *))icbd_signal, NULL);246 signal_add(&ev_sig, NULL);247 }248 242 249 243 (void)event_dispatch(); … … 549 543 550 544 void 551 icbd_modtab(char *mtab) 552 { 545 icbd_modupdate(void) 546 { 547 struct stat st; 553 548 FILE *fp; 554 549 char *buf, *lbuf; 555 550 size_t len; 556 551 557 if ((fp = fopen(mtab, "r")) == NULL) 558 err(EX_NOINPUT, "%s", mtab); 552 if (strlen(modtabpath) == 0) 553 return; 554 if (stat(modtabpath, &st)) { 555 syslog(LOG_ERR, "stat %s", modtabpath); 556 return; 557 } 558 /* see if there are any changes */ 559 if (timespeccmp(&st.st_mtim, &modtabst.st_mtim, ==) || 560 st.st_size == 0) 561 return; 562 563 if ((fp = fopen(modtabpath, "r")) == NULL) 564 err(EX_NOINPUT, "open %s", modtabpath); 559 565 560 566 modtabcnt = 0; … … 577 583 continue; 578 584 strlcpy(modtab[modtabcnt++], buf, ICB_MAXNICKLEN); 585 fprintf(stderr, "%s\n", buf); 579 586 } 580 587 free(lbuf); … … 584 591 585 592 fclose(fp); 586 }587 588 void589 icbd_signal(int sig)590 {591 switch (sig) {592 case SIGHUP:593 if (strlen(modtabpath) > 0)594 icbd_modtab(modtabpath);595 break;596 default:597 syslog(LOG_WARNING, "unexpected signal %d", sig);598 break;599 }600 593 } 601 594
Note:
See TracChangeset
for help on using the changeset viewer.