From: Andreas Schneider Date: Wed, 18 May 2016 14:51:45 +0000 (+0200) Subject: s3-net: Convert the key_name to UTF8 during migration X-Git-Tag: samba-4.3.10~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2261c232867a06492b9e3130cd5096fdd398f4ca;p=thirdparty%2Fsamba.git s3-net: Convert the key_name to UTF8 during migration BUG: https://bugzilla.samba.org/show_bug.cgi?id=11922 Pair-Programmed-With: Guenther Deschner Signed-off-by: Andreas Schneider Signed-off-by: Guenther Deschner (cherry picked from commit 858e1eaa64858790888b42d97ae4d6962a09756b) --- diff --git a/source3/utils/net_printing.c b/source3/utils/net_printing.c index 6f805ebac5c..cc82e51e67c 100644 --- a/source3/utils/net_printing.c +++ b/source3/utils/net_printing.c @@ -264,27 +264,66 @@ static int net_printing_dump(struct net_context *c, int argc, } if (strncmp((const char *)kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) == 0) { - dump_form(ctx, (const char *)kbuf.dptr+strlen(FORMS_PREFIX), dbuf.dptr, dbuf.dsize); + char *key_name = NULL; + size_t converted_size = 0; + bool ok; + + ok = pull_ascii_talloc(ctx, + &key_name, + (const char *) kbuf.dptr + strlen(FORMS_PREFIX), + &converted_size); + if (!ok) { + continue; + } + + dump_form(ctx, key_name, dbuf.dptr, dbuf.dsize); + TALLOC_FREE(key_name); SAFE_FREE(dbuf.dptr); continue; } if (strncmp((const char *)kbuf.dptr, DRIVERS_PREFIX, strlen(DRIVERS_PREFIX)) == 0) { + char *key_name = NULL; + size_t converted_size = 0; + bool ok; + + ok = pull_ascii_talloc(ctx, + &key_name, + (const char *) kbuf.dptr + strlen(DRIVERS_PREFIX), + &converted_size); + if (!ok) { + continue; + } + dump_driver(ctx, - (const char *)kbuf.dptr+strlen(DRIVERS_PREFIX), + key_name, dbuf.dptr, dbuf.dsize, do_string_conversion); + TALLOC_FREE(key_name); SAFE_FREE(dbuf.dptr); continue; } if (strncmp((const char *)kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) { + char *key_name = NULL; + size_t converted_size = 0; + bool ok; + + ok = pull_ascii_talloc(ctx, + &key_name, + (const char *) kbuf.dptr + strlen(PRINTERS_PREFIX), + &converted_size); + if (!ok) { + continue; + } + dump_printer(ctx, - (const char *)kbuf.dptr+strlen(PRINTERS_PREFIX), + key_name, dbuf.dptr, dbuf.dsize, do_string_conversion); + TALLOC_FREE(key_name); SAFE_FREE(dbuf.dptr); continue; } @@ -357,33 +396,72 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, } if (strncmp((const char *) kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) == 0) { + char *key_name = NULL; + size_t converted_size = 0; + bool ok; + + ok = pull_ascii_talloc(tmp_ctx, + &key_name, + (const char *) kbuf.dptr + strlen(FORMS_PREFIX), + &converted_size); + if (!ok) { + continue; + } + printing_tdb_migrate_form(tmp_ctx, winreg_pipe, - (const char *) kbuf.dptr + strlen(FORMS_PREFIX), + key_name, dbuf.dptr, dbuf.dsize); + TALLOC_FREE(key_name); SAFE_FREE(dbuf.dptr); continue; } if (strncmp((const char *) kbuf.dptr, DRIVERS_PREFIX, strlen(DRIVERS_PREFIX)) == 0) { + char *key_name = NULL; + size_t converted_size = 0; + bool ok; + + ok = pull_ascii_talloc(tmp_ctx, + &key_name, + (const char *) kbuf.dptr + strlen(DRIVERS_PREFIX), + &converted_size); + if (!ok) { + continue; + } + printing_tdb_migrate_driver(tmp_ctx, winreg_pipe, - (const char *) kbuf.dptr + strlen(DRIVERS_PREFIX), + key_name, dbuf.dptr, dbuf.dsize, do_string_conversion); + TALLOC_FREE(key_name); SAFE_FREE(dbuf.dptr); continue; } if (strncmp((const char *) kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) { + char *key_name = NULL; + size_t converted_size = 0; + bool ok; + + ok = pull_ascii_talloc(tmp_ctx, + &key_name, + (const char *) kbuf.dptr + strlen(PRINTERS_PREFIX), + &converted_size); + if (!ok) { + continue; + } + printing_tdb_migrate_printer(tmp_ctx, winreg_pipe, - (const char *) kbuf.dptr + strlen(PRINTERS_PREFIX), + key_name, dbuf.dptr, dbuf.dsize, do_string_conversion); + TALLOC_FREE(key_name); SAFE_FREE(dbuf.dptr); continue; }