Index: samba-3.6.25/source3/rpc_server/winreg/srv_winreg_nt.c =================================================================== --- samba-3.6.25.orig/source3/rpc_server/winreg/srv_winreg_nt.c 2021-01-06 23:54:12.000000000 +0800 +++ samba-3.6.25/source3/rpc_server/winreg/srv_winreg_nt.c 2021-01-07 10:47:03.382986263 +0800 @@ -637,46 +637,6 @@ } /******************************************************************* - ********************************************************************/ - -static int validate_reg_filename(TALLOC_CTX *ctx, char **pp_fname ) -{ - char *p = NULL; - int num_services = lp_numservices(); - int snum = -1; - const char *share_path = NULL; - char *fname = *pp_fname; - - /* convert to a unix path, stripping the C:\ along the way */ - - if (!(p = valid_share_pathname(ctx, fname))) { - return -1; - } - - /* has to exist within a valid file share */ - - for (snum=0; snumin.handle ); - char *fname = NULL; - int snum = -1; - - if ( !regkey ) - return WERR_BADFID; - if ( !r->in.filename || !r->in.filename->name ) - return WERR_INVALID_PARAM; - - fname = talloc_strdup(p->mem_ctx, r->in.filename->name); - if (!fname) { - return WERR_NOMEM; + if ( !regkey ) { + return WERR_INVALID_HANDLE; } - - DEBUG(8,("_winreg_RestoreKey: verifying restore of key [%s] from " - "\"%s\"\n", regkey->key->name, fname)); - - if ((snum = validate_reg_filename(p->mem_ctx, &fname)) == -1) - return WERR_OBJECT_PATH_INVALID; - - /* user must posses SeRestorePrivilege for this this proceed */ - - if ( !security_token_has_privilege(p->session_info->security_token, SEC_PRIV_RESTORE)) { - return WERR_ACCESS_DENIED; - } - - DEBUG(2,("_winreg_RestoreKey: Restoring [%s] from %s in share %s\n", - regkey->key->name, fname, lp_servicename(snum) )); - - return reg_restorekey(regkey, fname); + return WERR_BAD_PATHNAME; } /******************************************************************* @@ -724,30 +659,11 @@ struct winreg_SaveKey *r) { struct registry_key *regkey = find_regkey_by_hnd( p, r->in.handle ); - char *fname = NULL; - int snum = -1; - - if ( !regkey ) - return WERR_BADFID; - if ( !r->in.filename || !r->in.filename->name ) - return WERR_INVALID_PARAM; - - fname = talloc_strdup(p->mem_ctx, r->in.filename->name); - if (!fname) { - return WERR_NOMEM; + if ( !regkey ) { + return WERR_INVALID_HANDLE; } - - DEBUG(8,("_winreg_SaveKey: verifying backup of key [%s] to \"%s\"\n", - regkey->key->name, fname)); - - if ((snum = validate_reg_filename(p->mem_ctx, &fname)) == -1 ) - return WERR_OBJECT_PATH_INVALID; - - DEBUG(2,("_winreg_SaveKey: Saving [%s] to %s in share %s\n", - regkey->key->name, fname, lp_servicename(snum) )); - - return reg_savekey(regkey, fname); + return WERR_BAD_PATHNAME; } /*******************************************************************