1
1
Files
zyxel-vmg8825_b50b-cfw/package/samba/patches_3.6.25/035-CVE-2019-3880-v3-6.patch
T
2026-04-17 18:33:03 +02:00

126 lines
3.4 KiB
Diff

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; snum<num_services; snum++) {
- if (!lp_snum_ok(snum) || lp_print_ok(snum)) {
- continue;
- }
-
- share_path = lp_pathname(snum);
-
- /* make sure we have a path (e.g. [homes] ) */
- if (strlen(share_path) == 0) {
- continue;
- }
-
- if (strncmp(share_path, p, strlen(share_path)) == 0) {
- break;
- }
- }
-
- *pp_fname = p;
- return (snum < num_services) ? snum : -1;
-}
-
-/*******************************************************************
_winreg_RestoreKey
********************************************************************/
@@ -684,36 +644,11 @@
struct winreg_RestoreKey *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_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;
}
/*******************************************************************