Changeset 862 for trunk/server/source3/utils/net_printing.c
- Timestamp:
- May 13, 2014, 11:39:04 AM (11 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 860
- Property svn:mergeinfo changed
-
trunk/server/source3/utils/net_printing.c
r745 r862 38 38 #define SECDESC_PREFIX "SECDESC/" 39 39 40 #define ARG_ENCODING "encoding=" 41 42 struct printing_opts { 43 const char *encoding; 44 const char *tdb; 45 }; 46 47 static NTSTATUS printing_parse_args(TALLOC_CTX *mem_ctx, 48 struct printing_opts **popts, 49 int argc, const char **argv) 50 { 51 size_t c; 52 struct printing_opts *o; 53 54 if (argc == 0) { 55 return NT_STATUS_INVALID_PARAMETER; 56 } 57 58 o = talloc_zero(mem_ctx, struct printing_opts); 59 if (o == NULL) { 60 return NT_STATUS_INVALID_PARAMETER; 61 } 62 63 for (c = 0; c < argc; c++) { 64 if (strnequal(argv[c], ARG_ENCODING, sizeof(ARG_ENCODING) - 1)) { 65 o->encoding = talloc_strdup(o, 66 argv[c] + sizeof(ARG_ENCODING) - 1); 67 if (o->encoding == NULL) { 68 return NT_STATUS_NO_MEMORY; 69 } 70 } else { 71 o->tdb = talloc_strdup(o, argv[c]); 72 if (o->tdb == NULL) { 73 return NT_STATUS_NO_MEMORY; 74 } 75 } 76 } 77 78 *popts = o; 79 return NT_STATUS_OK; 80 } 81 40 82 static void dump_form(TALLOC_CTX *mem_ctx, 41 83 const char *key_name, … … 71 113 const char *key_name, 72 114 unsigned char *data, 73 size_t length) 115 size_t length, 116 bool do_string_conversion) 74 117 { 75 118 enum ndr_err_code ndr_err; … … 83 126 84 127 ZERO_STRUCT(r); 128 129 if (do_string_conversion) { 130 r.string_flags = LIBNDR_FLAG_STR_ASCII; 131 } 85 132 86 133 ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &r, … … 101 148 const char *key_name, 102 149 unsigned char *data, 103 size_t length) 150 size_t length, 151 bool do_string_conversion) 104 152 { 105 153 enum ndr_err_code ndr_err; … … 113 161 114 162 ZERO_STRUCT(r); 163 164 if (do_string_conversion) { 165 r.info.string_flags = LIBNDR_FLAG_STR_ASCII; 166 } 115 167 116 168 ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &r, … … 166 218 TDB_CONTEXT *tdb; 167 219 TDB_DATA kbuf, newkey, dbuf; 220 struct printing_opts *o; 221 const char *save_dos_charset = lp_dos_charset(); 222 bool do_string_conversion = false; 223 NTSTATUS status; 168 224 169 225 if (argc < 1 || c->display_usage) { 170 d_fprintf(stderr, "%s\nnet printing dump <file.tdb>\n", 171 _("Usage:")); 226 d_printf( "%s\n" 227 "net printing dump [options] <file.tdb>\n" 228 " %s\n", 229 _("Usage:"), 230 _("Dump formated printer information of the tdb.")); 231 d_printf(_("Valid options:\n")); 232 d_printf(_(" encoding=<CP> Set the Code Page of the tdb file.\n" 233 " See iconv -l for the list of CP values\n" 234 " (CP1252 is Western latin1, CP1251 is Cyrillic).\n")); 172 235 goto done; 173 236 } 174 237 175 tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0600); 238 status = printing_parse_args(ctx, &o, argc, argv); 239 if (!NT_STATUS_IS_OK(status)) { 240 d_fprintf(stderr, _("failed to parse arguments\n")); 241 goto done; 242 } 243 244 tdb = tdb_open_log(o->tdb, 0, TDB_DEFAULT, O_RDONLY, 0600); 176 245 if (!tdb) { 177 d_fprintf(stderr, _("failed to open tdb file: %s\n"), argv[0]);246 d_fprintf(stderr, _("failed to open tdb file: %s\n"), o->tdb); 178 247 goto done; 248 } 249 250 if (o->encoding != NULL) { 251 lp_set_cmdline("dos charset", o->encoding); 252 d_fprintf(stderr, _("do string conversion from %s to %s\n"), 253 lp_dos_charset(), lp_unix_charset()); 254 do_string_conversion = true; 179 255 } 180 256 … … 195 271 196 272 if (strncmp((const char *)kbuf.dptr, DRIVERS_PREFIX, strlen(DRIVERS_PREFIX)) == 0) { 197 dump_driver(ctx, (const char *)kbuf.dptr+strlen(DRIVERS_PREFIX), dbuf.dptr, dbuf.dsize); 273 dump_driver(ctx, 274 (const char *)kbuf.dptr+strlen(DRIVERS_PREFIX), 275 dbuf.dptr, 276 dbuf.dsize, 277 do_string_conversion); 198 278 SAFE_FREE(dbuf.dptr); 199 279 continue; … … 201 281 202 282 if (strncmp((const char *)kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) { 203 dump_printer(ctx, (const char *)kbuf.dptr+strlen(PRINTERS_PREFIX), dbuf.dptr, dbuf.dsize); 283 dump_printer(ctx, 284 (const char *)kbuf.dptr+strlen(PRINTERS_PREFIX), 285 dbuf.dptr, 286 dbuf.dsize, 287 do_string_conversion); 204 288 SAFE_FREE(dbuf.dptr); 205 289 continue; … … 217 301 218 302 done: 303 lp_set_cmdline("dos charset", save_dos_charset); 219 304 talloc_free(ctx); 220 305 return ret; … … 230 315 const char **argv) 231 316 { 317 struct printing_opts *o; 232 318 TALLOC_CTX *tmp_ctx; 233 319 TDB_CONTEXT *tdb; 234 320 TDB_DATA kbuf, newkey, dbuf; 235 321 NTSTATUS status; 322 const char *save_dos_charset = lp_dos_charset(); 323 bool do_string_conversion = false; 236 324 237 325 tmp_ctx = talloc_new(mem_ctx); … … 240 328 } 241 329 242 tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0600); 330 status = printing_parse_args(tmp_ctx, &o, argc, argv); 331 if (!NT_STATUS_IS_OK(status)) { 332 d_fprintf(stderr, _("failed to parse arguments\n")); 333 goto done; 334 } 335 336 tdb = tdb_open_log(o->tdb, 0, TDB_DEFAULT, O_RDONLY, 0600); 243 337 if (tdb == NULL) { 244 d_fprintf(stderr, _("failed to open tdb file: %s\n"), argv[0]);338 d_fprintf(stderr, _("failed to open tdb file: %s\n"), o->tdb); 245 339 status = NT_STATUS_NO_SUCH_FILE; 246 340 goto done; 341 } 342 343 if (o->encoding != NULL) { 344 lp_set_cmdline("dos charset", o->encoding); 345 d_fprintf(stderr, _("do string conversion from %s to %s\n"), 346 lp_dos_charset(), lp_unix_charset()); 347 do_string_conversion = true; 247 348 } 248 349 … … 271 372 (const char *) kbuf.dptr + strlen(DRIVERS_PREFIX), 272 373 dbuf.dptr, 273 dbuf.dsize); 374 dbuf.dsize, 375 do_string_conversion); 274 376 SAFE_FREE(dbuf.dptr); 275 377 continue; … … 281 383 (const char *) kbuf.dptr + strlen(PRINTERS_PREFIX), 282 384 dbuf.dptr, 283 dbuf.dsize); 385 dbuf.dsize, 386 do_string_conversion); 284 387 SAFE_FREE(dbuf.dptr); 285 388 continue; … … 313 416 314 417 done: 418 lp_set_cmdline("dos charset", save_dos_charset); 315 419 talloc_free(tmp_ctx); 316 420 return status; … … 323 427 if (argc < 1 || c->display_usage) { 324 428 d_printf( "%s\n" 325 "net printing migrate <file.tdb>\n"429 "net printing migrate [options] <file.tdb>\n" 326 430 " %s\n", 327 431 _("Usage:"), 328 432 _("Migrate tdb printing files to new storage")); 433 d_printf(_("Valid options:\n")); 434 d_printf(_(" encoding=<CP> Set the Code Page of the tdb file.\n" 435 " See iconv -l for the list of CP values\n" 436 " (CP1252 is Western latin1, CP1251 is Cyrillic).\n")); 329 437 return 0; 330 438 }
Note:
See TracChangeset
for help on using the changeset viewer.