NET_API_STATUS libnetapi_net_init(struct libnetapi_ctx **context) { NET_API_STATUS status; struct libnetapi_ctx *ctx = NULL; char *krb5_cc_env = NULL; TALLOC_CTX *frame = talloc_stackframe(); ctx = talloc_zero(frame, struct libnetapi_ctx); if (!ctx) { TALLOC_FREE(frame); return W_ERROR_V(WERR_NOMEM); } BlockSignals(True, SIGPIPE); krb5_cc_env = getenv(KRB5_ENV_CCNAME); if (!krb5_cc_env || (strlen(krb5_cc_env) == 0)) { ctx->krb5_cc_env = talloc_strdup(ctx, "MEMORY:libnetapi"); setenv(KRB5_ENV_CCNAME, ctx->krb5_cc_env, 1); } if (getenv("USER")) { ctx->username = talloc_strdup(ctx, getenv("USER")); } else { ctx->username = talloc_strdup(ctx, ""); } if (!ctx->username) { TALLOC_FREE(frame); fprintf(stderr, "libnetapi_init: out of memory\n"); return W_ERROR_V(WERR_NOMEM); } status = libnetapi_init_private_context(ctx); if (status != 0) { TALLOC_FREE(frame); return status; } libnetapi_initialized = true; talloc_steal(NULL, ctx); *context = stat_ctx = ctx; TALLOC_FREE(frame); return NET_API_STATUS_SUCCESS; }
NET_API_STATUS libnetapi_init(struct libnetapi_ctx **context) { NET_API_STATUS status; struct libnetapi_ctx *ctx = NULL; char *krb5_cc_env = NULL; if (stat_ctx && libnetapi_initialized) { *context = stat_ctx; return NET_API_STATUS_SUCCESS; } #if 0 talloc_enable_leak_report(); #endif frame = talloc_stackframe(); ctx = talloc_zero(frame, struct libnetapi_ctx); if (!ctx) { TALLOC_FREE(frame); return W_ERROR_V(WERR_NOMEM); } if (!DEBUGLEVEL) { DEBUGLEVEL = 0; } /* prevent setup_logging() from closing x_stderr... */ dbf = 0; setup_logging("libnetapi", true); dbf = x_stderr; x_setbuf(x_stderr, NULL); AllowDebugChange = false; load_case_tables(); if (!lp_load(get_dyn_CONFIGFILE(), true, false, false, false)) { TALLOC_FREE(frame); fprintf(stderr, "lp_load failed\n"); return W_ERROR_V(WERR_GENERAL_FAILURE); } AllowDebugChange = true; init_names(); load_interfaces(); reopen_logs(); BlockSignals(True, SIGPIPE); krb5_cc_env = getenv(KRB5_ENV_CCNAME); if (!krb5_cc_env || (strlen(krb5_cc_env) == 0)) { ctx->krb5_cc_env = talloc_strdup(frame, "MEMORY:libnetapi"); setenv(KRB5_ENV_CCNAME, ctx->krb5_cc_env, 1); } if (getenv("USER")) { ctx->username = talloc_strdup(frame, getenv("USER")); } else { ctx->username = talloc_strdup(frame, ""); } if (!ctx->username) { TALLOC_FREE(frame); fprintf(stderr, "libnetapi_init: out of memory\n"); return W_ERROR_V(WERR_NOMEM); } status = libnetapi_init_private_context(ctx); if (status != 0) { TALLOC_FREE(frame); return status; } libnetapi_initialized = true; *context = stat_ctx = ctx; return NET_API_STATUS_SUCCESS; }