static WERROR NetServerSetInfo_l_1005(struct libnetapi_ctx *ctx, struct NetServerSetInfo *r) { WERROR werr = WERR_OK; sbcErr err; struct smbconf_ctx *conf_ctx; struct srvsvc_NetSrvInfo1005 *info1005; if (!r->in.buffer) { *r->out.parm_error = 1005; /* sure here ? */ return WERR_INVALID_PARAM; } info1005 = (struct srvsvc_NetSrvInfo1005 *)r->in.buffer; if (!info1005->comment) { *r->out.parm_error = 1005; return WERR_INVALID_PARAM; } #ifdef REGISTRY_BACKEND if (!lp_config_backend_is_registry()) #endif { libnetapi_set_error_string(ctx, "Configuration manipulation requested but not " "supported by backend"); return WERR_NOT_SUPPORTED; } err = smbconf_init_reg(ctx, &conf_ctx, NULL); if (!SBC_ERROR_IS_OK(err)) { libnetapi_set_error_string(ctx, "Could not initialize backend: %s", sbcErrorString(err)); werr = WERR_NO_SUCH_SERVICE; goto done; } err = smbconf_set_global_parameter(conf_ctx, "server string", info1005->comment); if (!SBC_ERROR_IS_OK(err)) { libnetapi_set_error_string(ctx, "Could not set global parameter: %s", sbcErrorString(err)); werr = WERR_NO_SUCH_SERVICE; goto done; } done: smbconf_shutdown(conf_ctx); return werr; }
static WERROR NetServerSetInfo_l_1005(struct libnetapi_ctx *ctx, struct NetServerSetInfo *r) { WERROR werr; struct smbconf_ctx *conf_ctx; struct srvsvc_NetSrvInfo1005 *info1005; if (!r->in.buffer) { *r->out.parm_error = 1005; /* sure here ? */ return WERR_INVALID_PARAM; } info1005 = (struct srvsvc_NetSrvInfo1005 *)r->in.buffer; if (!info1005->comment) { *r->out.parm_error = 1005; return WERR_INVALID_PARAM; } if (!lp_config_backend_is_registry()) { libnetapi_set_error_string(ctx, "Configuration manipulation requested but not " "supported by backend"); return WERR_NOT_SUPPORTED; } werr = smbconf_init_reg(ctx, &conf_ctx, NULL); if (!W_ERROR_IS_OK(werr)) { goto done; } werr = smbconf_set_global_parameter(conf_ctx, "server string", info1005->comment); done: smbconf_shutdown(conf_ctx); return werr; }
WERROR _wkssvc_NetrUnjoinDomain2(struct pipes_struct *p, struct wkssvc_NetrUnjoinDomain2 *r) { struct libnet_UnjoinCtx *u = NULL; char *cleartext_pwd = NULL; char *admin_domain = NULL; char *admin_account = NULL; WERROR werr; struct security_token *token = p->session_info->security_token; if (!r->in.account || !r->in.encrypted_password) { return WERR_INVALID_PARAM; } if (!security_token_has_privilege(token, SEC_PRIV_MACHINE_ACCOUNT) && !nt_token_check_domain_rid(token, DOMAIN_RID_ADMINS) && !nt_token_check_sid(&global_sid_Builtin_Administrators, token)) { DEBUG(5,("_wkssvc_NetrUnjoinDomain2: account doesn't have " "sufficient privileges\n")); return WERR_ACCESS_DENIED; } werr = decode_wkssvc_join_password_buffer( p->mem_ctx, r->in.encrypted_password, &p->session_info->session_key, &cleartext_pwd); if (!W_ERROR_IS_OK(werr)) { return werr; } split_domain_user(p->mem_ctx, r->in.account, &admin_domain, &admin_account); werr = libnet_init_UnjoinCtx(p->mem_ctx, &u); if (!W_ERROR_IS_OK(werr)) { return werr; } u->in.domain_name = lp_realm(); u->in.unjoin_flags = r->in.unjoin_flags | WKSSVC_JOIN_FLAGS_JOIN_TYPE; u->in.admin_account = admin_account; u->in.admin_password = cleartext_pwd; u->in.debug = true; u->in.modify_config = lp_config_backend_is_registry(); u->in.msg_ctx = p->msg_ctx; become_root(); werr = libnet_Unjoin(p->mem_ctx, u); unbecome_root(); if (!W_ERROR_IS_OK(werr)) { DEBUG(5,("_wkssvc_NetrUnjoinDomain2: libnet_Unjoin failed with: %s\n", u->out.error_string ? u->out.error_string : win_errstr(werr))); } TALLOC_FREE(u); return werr; }