static krb5_error_code open_syslog(krb5_context context, krb5_log_facility *facility, int min, int max, const char *sev, const char *fac) { struct _heimdal_syslog_data *sd = malloc(sizeof(*sd)); int i; if(sd == NULL) { krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", "")); return ENOMEM; } i = find_value(sev, syslogvals); if(i == -1) i = LOG_ERR; sd->priority = i; i = find_value(fac, syslogvals); if(i == -1) i = LOG_AUTH; sd->priority |= i; roken_openlog(facility->program, LOG_PID | LOG_NDELAY, i); return krb5_addlog_func(context, facility, min, max, log_syslog, close_syslog, sd); }
static krb5_error_code open_file(krb5_context context, krb5_log_facility *fac, int min, int max, const char *filename, const char *mode, FILE *f, int keep_open) { struct file_data *fd = malloc(sizeof(*fd)); if(fd == NULL) { krb5_set_error_string (context, "malloc: out of memory"); return ENOMEM; } fd->filename = filename; fd->mode = mode; fd->fd = f; fd->keep_open = keep_open; return krb5_addlog_func(context, fac, min, max, log_file, close_file, fd); }
krb5_error_code smb_krb5_init_context(void *parent_ctx, struct tevent_context *ev, struct loadparm_context *lp_ctx, struct smb_krb5_context **smb_krb5_context) { krb5_error_code ret; TALLOC_CTX *tmp_ctx; initialize_krb5_error_table(); tmp_ctx = talloc_new(parent_ctx); *smb_krb5_context = talloc(tmp_ctx, struct smb_krb5_context); if (!*smb_krb5_context || !tmp_ctx) { talloc_free(tmp_ctx); return ENOMEM; } ret = smb_krb5_init_context_basic(tmp_ctx, ev, lp_ctx, &(*smb_krb5_context)->krb5_context); if (ret) { DEBUG(1,("smb_krb5_context_init_basic failed (%s)\n", error_message(ret))); talloc_free(tmp_ctx); return ret; } /* TODO: Should we have a different name here? */ ret = krb5_initlog((*smb_krb5_context)->krb5_context, "Samba", &(*smb_krb5_context)->logf); if (ret) { DEBUG(1,("krb5_initlog failed (%s)\n", smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx))); krb5_free_context((*smb_krb5_context)->krb5_context); talloc_free(tmp_ctx); return ret; } talloc_set_destructor(*smb_krb5_context, smb_krb5_context_destroy); ret = krb5_addlog_func((*smb_krb5_context)->krb5_context, (*smb_krb5_context)->logf, 0 /* min */, -1 /* max */, smb_krb5_debug_wrapper, smb_krb5_debug_close, NULL); if (ret) { DEBUG(1,("krb5_addlog_func failed (%s)\n", smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx))); talloc_free(tmp_ctx); return ret; } krb5_set_warn_dest((*smb_krb5_context)->krb5_context, (*smb_krb5_context)->logf); /* Set use of our socket lib */ ret = krb5_set_send_to_kdc_func((*smb_krb5_context)->krb5_context, smb_krb5_send_and_recv_func, ev); if (ret) { DEBUG(1,("krb5_set_send_recv_func failed (%s)\n", smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx))); talloc_free(tmp_ctx); return ret; } talloc_steal(parent_ctx, *smb_krb5_context); talloc_free(tmp_ctx); /* Set options in kerberos */ krb5_set_dns_canonicalize_hostname((*smb_krb5_context)->krb5_context, lp_parm_bool(lp_ctx, NULL, "krb5", "set_dns_canonicalize", false)); return 0; }
krb5_error_code smb_krb5_init_context(void *parent_ctx, struct loadparm_context *lp_ctx, struct smb_krb5_context **smb_krb5_context) { krb5_error_code ret; TALLOC_CTX *tmp_ctx; krb5_context kctx; #ifdef SAMBA4_USES_HEIMDAL krb5_log_facility *logf; #endif initialize_krb5_error_table(); tmp_ctx = talloc_new(parent_ctx); *smb_krb5_context = talloc_zero(tmp_ctx, struct smb_krb5_context); if (!*smb_krb5_context || !tmp_ctx) { talloc_free(tmp_ctx); return ENOMEM; } ret = smb_krb5_init_context_basic(tmp_ctx, lp_ctx, &kctx); if (ret) { DEBUG(1,("smb_krb5_context_init_basic failed (%s)\n", error_message(ret))); talloc_free(tmp_ctx); return ret; } (*smb_krb5_context)->krb5_context = kctx; talloc_set_destructor(*smb_krb5_context, smb_krb5_context_destroy); #ifdef SAMBA4_USES_HEIMDAL /* TODO: Should we have a different name here? */ ret = krb5_initlog(kctx, "Samba", &logf); if (ret) { DEBUG(1,("krb5_initlog failed (%s)\n", smb_get_krb5_error_message(kctx, ret, tmp_ctx))); talloc_free(tmp_ctx); return ret; } (*smb_krb5_context)->pvt_log_data = logf; ret = krb5_addlog_func(kctx, logf, 0 /* min */, -1 /* max */, smb_krb5_debug_wrapper, smb_krb5_debug_close, NULL); if (ret) { DEBUG(1,("krb5_addlog_func failed (%s)\n", smb_get_krb5_error_message(kctx, ret, tmp_ctx))); talloc_free(tmp_ctx); return ret; } krb5_set_warn_dest(kctx, logf); /* Set options in kerberos */ krb5_set_dns_canonicalize_hostname(kctx, lpcfg_parm_bool(lp_ctx, NULL, "krb5", "set_dns_canonicalize", false)); #endif talloc_steal(parent_ctx, *smb_krb5_context); talloc_free(tmp_ctx); return 0; }