diff options
-rw-r--r-- | source3/services/services_db.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/source3/services/services_db.c b/source3/services/services_db.c index 1ebaa77aa0..118091f682 100644 --- a/source3/services/services_db.c +++ b/source3/services/services_db.c @@ -514,49 +514,38 @@ void svcctl_init_keys( void ) struct security_descriptor *svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, struct security_token *token ) { - struct registry_key_handle *key = NULL; - struct regval_ctr *values = NULL; - struct regval_blob *val = NULL; + struct registry_key *key = NULL; + struct registry_value *value; struct security_descriptor *ret_sd = NULL; char *path= NULL; WERROR wresult; NTSTATUS status; TALLOC_CTX *mem_ctx = talloc_stackframe(); - /* now add the security descriptor */ - path = talloc_asprintf(mem_ctx, "%s\\%s\\%s", KEY_SERVICES, name, "Security"); if (path == NULL) { goto done; } - wresult = regkey_open_internal(mem_ctx, &key, path, token, REG_KEY_ALL); + wresult = reg_open_path(mem_ctx, path, REG_KEY_ALL, token, &key); if ( !W_ERROR_IS_OK(wresult) ) { DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n", path, win_errstr(wresult))); goto done; } - wresult = regval_ctr_init(key, &values); - if (!W_ERROR_IS_OK(wresult)) { - DEBUG(0,("svcctl_get_secdesc: talloc() failed!\n")); - goto done; - } - - if (fetch_reg_values( key, values ) == -1) { - DEBUG(0, ("Error getting registry values\n")); - goto done; - } - - if ( !(val = regval_ctr_getvalue( values, "Security" )) ) { + wresult = reg_queryvalue(mem_ctx, key, "Security", &value); + if (W_ERROR_EQUAL(wresult, WERR_BADFILE)) { goto fallback_to_default_sd; + } else if (!W_ERROR_IS_OK(wresult)) { + DEBUG(0, ("svcctl_get_secdesc: error getting value 'Security': " + "%s\n", win_errstr(wresult))); + goto done; } - /* stream the service security descriptor */ - - status = unmarshall_sec_desc(ctx, regval_data_p(val), - regval_size(val), &ret_sd); + status = unmarshall_sec_desc(ctx, value->data.data, + value->data.length, &ret_sd); if (NT_STATUS_IS_OK(status)) { goto done; |