summaryrefslogtreecommitdiff
path: root/source3/utils/net_printing.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/utils/net_printing.c')
-rw-r--r--source3/utils/net_printing.c158
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,