static void physical_Found(struct physical *p) { FILE *lockfile; char fn[PATH_MAX]; if (*p->name.full == '/') { snprintf(fn, sizeof fn, "%s%s.if", _PATH_VARRUN, p->name.base); lockfile = ID0fopen(fn, "w"); if (lockfile != NULL) { fprintf(lockfile, "%s%d\n", TUN_NAME, p->dl->bundle->unit); fclose(lockfile); } #ifndef RELEASE_CRUNCH else log_Printf(LogALERT, "%s: Can't create %s: %s\n", p->link.name, fn, strerror(errno)); #endif } throughput_start(&p->link.stats.total, "physical throughput", Enabled(p->dl->bundle, OPT_THROUGHPUT)); p->connect_count++; p->input.sz = 0; log_Printf(LogPHASE, "%s: Connected!\n", p->link.name); }
FILE * OpenSecret(const char *file) { FILE *fp; char line[100]; snprintf(line, sizeof line, "%s/%s", PPP_CONFDIR, file); fp = ID0fopen(line, "r"); if (fp == NULL) log_Printf(LogWARN, "OpenSecret: Can't open %s.\n", line); return (fp); }
static int ReadSystem(struct bundle *bundle, const char *name, const char *file, struct prompt *prompt, struct datalink *cx, int how) { FILE *fp; char *cp; int n, len; char line[LINE_LEN]; char filename[PATH_MAX]; int linenum; int argc; char *argv[MAXARGS]; int allowcmd; int indent; char arg[LINE_LEN]; struct prompt *op; if (*file == '/') snprintf(filename, sizeof filename, "%s", file); else snprintf(filename, sizeof filename, "%s/%s", PPP_CONFDIR, file); fp = ID0fopen(filename, "r"); if (fp == NULL) { log_Printf(LogDEBUG, "ReadSystem: Can't open %s.\n", filename); return -2; } log_Printf(LogDEBUG, "ReadSystem: Checking %s (%s).\n", name, filename); linenum = 0; while ((n = xgets(line, sizeof line, fp))) { linenum += n; if (issep(*line)) continue; cp = strip(line); switch (*cp) { case '\0': /* empty/comment */ break; case '!': switch (DecodeCtrlCommand(cp+1, arg, LINE_LEN)) { case CTRL_INCLUDE: log_Printf(LogCOMMAND, "%s: Including \"%s\"\n", filename, arg); n = ReadSystem(bundle, name, arg, prompt, cx, how); log_Printf(LogCOMMAND, "%s: Done include of \"%s\"\n", filename, arg); if (!n) { fclose(fp); return 0; /* got it */ } break; default: log_Printf(LogWARN, "%s: %s: Invalid command\n", filename, cp); break; } break; default: if ((cp = GetLabel(cp, filename, linenum)) == NULL) continue; if (strcmp(cp, name) == 0) { /* We're in business */ if (how == SYSTEM_EXISTS) { fclose(fp); return 0; } while ((n = xgets(line, sizeof line, fp))) { linenum += n; indent = issep(*line); cp = strip(line); if (*cp == '\0') /* empty / comment */ continue; if (!indent) { /* start of next section */ if (*cp != '!' && how == SYSTEM_EXEC) cp = GetLabel(cp, filename, linenum); break; } len = strlen(cp); if ((argc = command_Expand_Interpret(cp, len, argv, cp - line)) < 0) log_Printf(LogWARN, "%s: %d: Syntax error\n", filename, linenum); else { allowcmd = argc > 0 && !strcasecmp(argv[0], "allow"); if ((how != SYSTEM_EXEC && allowcmd) || (how == SYSTEM_EXEC && !allowcmd)) { /* * Disable any context so that warnings are given to everyone, * including syslog. */ op = log_PromptContext; log_PromptContext = NULL; command_Run(bundle, argc, (char const *const *)argv, prompt, name, cx); log_PromptContext = op; } } } fclose(fp); /* everything read - get out */ return 0; } break; } } fclose(fp); return -1; }