diff options
Diffstat (limited to 'source3/utils/net_printing.c')
-rw-r--r-- | source3/utils/net_printing.c | 158 |
1 files changed, 25 insertions, 133 deletions
diff --git a/source3/utils/net_printing.c b/source3/utils/net_printing.c index ccb073cf6f..870f0c3ec3 100644 --- a/source3/utils/net_printing.c +++ b/source3/utils/net_printing.c @@ -37,48 +37,6 @@ #define PRINTERS_PREFIX "PRINTERS/" #define SECDESC_PREFIX "SECDESC/" -#define ARG_ENCODING "encoding=" - -struct printing_opts { - const char *encoding; - const char *tdb; -}; - -static NTSTATUS printing_parse_args(TALLOC_CTX *mem_ctx, - struct printing_opts **popts, - int argc, const char **argv) -{ - size_t c; - struct printing_opts *o; - - if (argc == 0) { - return NT_STATUS_INVALID_PARAMETER; - } - - o = talloc_zero(mem_ctx, struct printing_opts); - if (o == NULL) { - return NT_STATUS_INVALID_PARAMETER; - } - - for (c = 0; c < argc; c++) { - if (strnequal(argv[c], ARG_ENCODING, sizeof(ARG_ENCODING) - 1)) { - o->encoding = talloc_strdup(o, - argv[c] + sizeof(ARG_ENCODING) - 1); - if (o->encoding == NULL) { - return NT_STATUS_NO_MEMORY; - } - } else { - o->tdb = talloc_strdup(o, argv[c]); - if (o->tdb == NULL) { - return NT_STATUS_NO_MEMORY; - } - } - } - - *popts = o; - return NT_STATUS_OK; -} - static void dump_form(TALLOC_CTX *mem_ctx, const char *key_name, unsigned char *data, @@ -112,8 +70,7 @@ static void dump_form(TALLOC_CTX *mem_ctx, static void dump_driver(TALLOC_CTX *mem_ctx, const char *key_name, unsigned char *data, - size_t length, - bool do_string_conversion) + size_t length) { enum ndr_err_code ndr_err; DATA_BLOB blob; @@ -126,10 +83,6 @@ static void dump_driver(TALLOC_CTX *mem_ctx, ZERO_STRUCT(r); - if (do_string_conversion) { - r.string_flags = LIBNDR_FLAG_STR_ASCII; - } - ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &r, (ndr_pull_flags_fn_t)ndr_pull_ntprinting_driver); if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { @@ -147,8 +100,7 @@ static void dump_driver(TALLOC_CTX *mem_ctx, static void dump_printer(TALLOC_CTX *mem_ctx, const char *key_name, unsigned char *data, - size_t length, - bool do_string_conversion) + size_t length) { enum ndr_err_code ndr_err; DATA_BLOB blob; @@ -161,10 +113,6 @@ static void dump_printer(TALLOC_CTX *mem_ctx, ZERO_STRUCT(r); - if (do_string_conversion) { - r.info.string_flags = LIBNDR_FLAG_STR_ASCII; - } - ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &r, (ndr_pull_flags_fn_t)ndr_pull_ntprinting_printer); if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { @@ -216,49 +164,25 @@ static int net_printing_dump(struct net_context *c, int argc, int ret = -1; TALLOC_CTX *ctx = talloc_stackframe(); TDB_CONTEXT *tdb; - TDB_DATA kbuf, newkey, dbuf; - struct printing_opts *o; - const char *save_dos_charset = lp_dos_charset(); - bool do_string_conversion = false; - NTSTATUS status; + TDB_DATA kbuf, dbuf; if (argc < 1 || c->display_usage) { - d_printf( "%s\n" - "net printing dump [options] <file.tdb>\n" - " %s\n", - _("Usage:"), - _("Dump formated printer information of the tdb.")); - d_printf(_("Valid options:\n")); - d_printf(_(" encoding=<CP> Set the Code Page of the tdb file.\n" - " See iconv -l for the list of CP values\n" - " (CP1252 is Western latin1, CP1251 is Cyrillic).\n")); + d_fprintf(stderr, "%s\nnet printing dump <file.tdb>\n", + _("Usage:")); goto done; } - status = printing_parse_args(ctx, &o, argc, argv); - if (!NT_STATUS_IS_OK(status)) { - d_fprintf(stderr, _("failed to parse arguments\n")); - goto done; - } - - tdb = tdb_open_log(o->tdb, 0, TDB_DEFAULT, O_RDONLY, 0600); + tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0600); if (!tdb) { - d_fprintf(stderr, _("failed to open tdb file: %s\n"), o->tdb); + d_fprintf(stderr, _("failed to open tdb file: %s\n"), argv[0]); goto done; } - if (o->encoding != NULL) { - lp_set_cmdline("dos charset", o->encoding); - d_fprintf(stderr, _("do string conversion from %s to %s\n"), - lp_dos_charset(), lp_unix_charset()); - do_string_conversion = true; - } - - for (kbuf = tdb_firstkey(tdb); + for (kbuf = tdb_firstkey_compat(tdb); kbuf.dptr; - newkey = tdb_nextkey(tdb, kbuf), free(kbuf.dptr), kbuf=newkey) + kbuf = tdb_nextkey_compat(tdb, kbuf)) { - dbuf = tdb_fetch(tdb, kbuf); + dbuf = tdb_fetch_compat(tdb, kbuf); if (!dbuf.dptr) { continue; } @@ -270,21 +194,13 @@ static int net_printing_dump(struct net_context *c, int argc, } if (strncmp((const char *)kbuf.dptr, DRIVERS_PREFIX, strlen(DRIVERS_PREFIX)) == 0) { - dump_driver(ctx, - (const char *)kbuf.dptr+strlen(DRIVERS_PREFIX), - dbuf.dptr, - dbuf.dsize, - do_string_conversion); + dump_driver(ctx, (const char *)kbuf.dptr+strlen(DRIVERS_PREFIX), dbuf.dptr, dbuf.dsize); SAFE_FREE(dbuf.dptr); continue; } if (strncmp((const char *)kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) { - dump_printer(ctx, - (const char *)kbuf.dptr+strlen(PRINTERS_PREFIX), - dbuf.dptr, - dbuf.dsize, - do_string_conversion); + dump_printer(ctx, (const char *)kbuf.dptr+strlen(PRINTERS_PREFIX), dbuf.dptr, dbuf.dsize); SAFE_FREE(dbuf.dptr); continue; } @@ -300,7 +216,6 @@ static int net_printing_dump(struct net_context *c, int argc, ret = 0; done: - lp_set_cmdline("dos charset", save_dos_charset); talloc_free(ctx); return ret; } @@ -314,44 +229,28 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, int argc, const char **argv) { - struct printing_opts *o; TALLOC_CTX *tmp_ctx; TDB_CONTEXT *tdb; - TDB_DATA kbuf, newkey, dbuf; + TDB_DATA kbuf, dbuf; NTSTATUS status; - const char *save_dos_charset = lp_dos_charset(); - bool do_string_conversion = false; tmp_ctx = talloc_new(mem_ctx); if (tmp_ctx == NULL) { return NT_STATUS_NO_MEMORY; } - status = printing_parse_args(tmp_ctx, &o, argc, argv); - if (!NT_STATUS_IS_OK(status)) { - d_fprintf(stderr, _("failed to parse arguments\n")); - goto done; - } - - tdb = tdb_open_log(o->tdb, 0, TDB_DEFAULT, O_RDONLY, 0600); + tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0600); if (tdb == NULL) { - d_fprintf(stderr, _("failed to open tdb file: %s\n"), o->tdb); + d_fprintf(stderr, _("failed to open tdb file: %s\n"), argv[0]); status = NT_STATUS_NO_SUCH_FILE; goto done; } - if (o->encoding != NULL) { - lp_set_cmdline("dos charset", o->encoding); - d_fprintf(stderr, _("do string conversion from %s to %s\n"), - lp_dos_charset(), lp_unix_charset()); - do_string_conversion = true; - } - - for (kbuf = tdb_firstkey(tdb); + for (kbuf = tdb_firstkey_compat(tdb); kbuf.dptr; - newkey = tdb_nextkey(tdb, kbuf), free(kbuf.dptr), kbuf = newkey) + kbuf = tdb_nextkey_compat(tdb, kbuf)) { - dbuf = tdb_fetch(tdb, kbuf); + dbuf = tdb_fetch_compat(tdb, kbuf); if (!dbuf.dptr) { continue; } @@ -371,8 +270,7 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, winreg_pipe, (const char *) kbuf.dptr + strlen(DRIVERS_PREFIX), dbuf.dptr, - dbuf.dsize, - do_string_conversion); + dbuf.dsize); SAFE_FREE(dbuf.dptr); continue; } @@ -382,19 +280,18 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, winreg_pipe, (const char *) kbuf.dptr + strlen(PRINTERS_PREFIX), dbuf.dptr, - dbuf.dsize, - do_string_conversion); + dbuf.dsize); SAFE_FREE(dbuf.dptr); continue; } SAFE_FREE(dbuf.dptr); } - for (kbuf = tdb_firstkey(tdb); + for (kbuf = tdb_firstkey_compat(tdb); kbuf.dptr; - newkey = tdb_nextkey(tdb, kbuf), free(kbuf.dptr), kbuf = newkey) + kbuf = tdb_nextkey_compat(tdb, kbuf)) { - dbuf = tdb_fetch(tdb, kbuf); + dbuf = tdb_fetch_compat(tdb, kbuf); if (!dbuf.dptr) { continue; } @@ -415,7 +312,6 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, status = NT_STATUS_OK; done: - lp_set_cmdline("dos charset", save_dos_charset); talloc_free(tmp_ctx); return status; } @@ -426,20 +322,16 @@ static int net_printing_migrate(struct net_context *c, { if (argc < 1 || c->display_usage) { d_printf( "%s\n" - "net printing migrate [options] <file.tdb>\n" + "net printing migrate <file.tdb>\n" " %s\n", _("Usage:"), _("Migrate tdb printing files to new storage")); - d_printf(_("Valid options:\n")); - d_printf(_(" encoding=<CP> Set the Code Page of the tdb file.\n" - " See iconv -l for the list of CP values\n" - " (CP1252 is Western latin1, CP1251 is Cyrillic).\n")); return 0; } return run_rpc_command(c, NULL, - &ndr_table_winreg.syntax_id, + &ndr_table_winreg, 0, printing_migrate_internal, argc, |