Пример #1
0
static void log_cmd (const char *op, s_symtable *cmd)
{
  char msg[2048];
  assert(cmd);
  stracat(msg, sizeof(msg), cmd->sym, cmd->count);
  syslog(LOG_INFO, "%s %s", op, msg);
}
Пример #2
0
static void log_rule (const char *op, s_symtable *cmd)
{
  char msg[2048];
  size_t m = 0;
  assert(cmd);
  m += strlcpy(msg + m, ENV_AUTH_ID, sizeof(msg) - m);
  msg[m++] = '=';
  stracat(msg + m, sizeof(msg) - m, cmd->sym, cmd->count);
  syslog(LOG_INFO, "%s %s", op, msg);
}
Пример #3
0
static void exec_cmd (const s_symtable *cmd)
{
  s_symtable xc;
  char buf[2048];
  assert(cmd);
  symtable_init(&xc);
  symtable_add(&xc, SHELL);
  symtable_add(&xc, "-c");
  stracat(buf, sizeof(buf), cmd->sym + 1, cmd->count - 1);
  symtable_add(&xc, buf);
  log_cmd("EXEC", &xc);
  cleanup();
  execvp(xc.sym[0], (char **)xc.sym);
  syslog(LOG_ERR, "execvp: %s", strerror(errno));
  err(2, "execvp");
}
Пример #4
0
Файл: load.c Проект: adh/dfsch
void dfsch_load(dfsch_object_t* env, char* name, 
                dfsch_object_t* path_list,
                int as_toplevel){
  struct stat st;
  dfsch_object_t* path;
  char *pathpart;
  char *fname;
  str_list_t* l;
  int i;

  for (i = 0; i < sizeof(builtin_modules) / sizeof(builtin_module_t); i++){
    if (strcmp(builtin_modules[i].name, name) == 0){
      builtin_modules[i].register_proc(env);
      return;
    }
  }

  if (path_list){
    path = path_list;
  } else {
    path = dfsch_env_get_cstr(env, "*load-path*");
    if (path == DFSCH_INVALID_OBJECT){
      path = NULL;
    }
  }

  while (DFSCH_PAIR_P(path)){
    dfsch_object_t* pp = DFSCH_FAST_CAR(path);
    if (!dfsch_string_p(pp)){
      if (dfsch_apply(pp, dfsch_list(2,
                                     env,
                                     dfsch_make_string_cstr(name)))){
        return;
      }
      path = DFSCH_FAST_CDR(path);
      continue;
    }
    l = sl_create();
    sl_append(l, dfsch_string_to_cstr(DFSCH_FAST_CAR(path)));
    sl_append(l, "/");
    sl_append(l, name);
    pathpart = sl_value(l);
    if (stat(pathpart, &st) == 0){ 
      if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)){

        for (i = 0; i < sizeof(loaders) / sizeof(module_loader_t); i++){
          if (strcmp(pathpart + strlen(pathpart) - strlen(loaders[i].path_ext),
                     loaders[i].path_ext) == 0){
            loaders[i].load(pathpart, env, as_toplevel);	      
            return;
          }
        }

        dfsch_load_scm(env, pathpart, 0);
        return;
      }
    }

    for (i = 0; i < sizeof(loaders) / sizeof(module_loader_t); i++){
      fname = stracat(pathpart, loaders[i].path_ext);
      if (stat(fname, &st) == 0 && (S_ISREG(st.st_mode) || 
                                    S_ISLNK(st.st_mode))){
        loaders[i].load(fname, env, as_toplevel);	      
        return;
      }
    }
    
    path = dfsch_cdr(path);
  }
  
  dfsch_error("Module not found", dfsch_make_string_cstr(name));
}
Пример #5
0
static void log_args (const char *op, int argc, const char **argv)
{
  char msg[2048];
  stracat(msg, sizeof(msg), argv, argc);
  syslog(LOG_INFO, "%s %s", op, msg);
}