summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@suse.de>2011-06-15 14:59:49 +0200
committerKarolin Seeger <kseeger@samba.org>2011-07-26 21:52:22 +0200
commit0dc1ac903016ea456df02a2909395be640d7c155 (patch)
tree17666cdbc113181c65a0ea28aac1f558a715285f
parent1da6fe27409388ecb96e3dce7268b44066e31401 (diff)
downloadsamba-0dc1ac903016ea456df02a2909395be640d7c155.tar.gz
samba-0dc1ac903016ea456df02a2909395be640d7c155.tar.xz
samba-0dc1ac903016ea456df02a2909395be640d7c155.zip
s3-printing: skip migration of non-existent printers
Skip tdb migration of printer and security descriptor entries which refer to non-existent printers. Signed-off-by: Günther Deschner <gd@samba.org> Autobuild-User: Günther Deschner <gd@samba.org> Autobuild-Date: Thu Jun 30 10:54:23 CEST 2011 on sn-devel-104 (cherry picked from commit c9e3f6ab02bdc354a9b656f62744ee66fe9e9e67) (cherry picked from commit d24c4ef87ff02975cdb024e01b067107c60050cc)
-rw-r--r--source3/printing/nt_printing_migrate.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/source3/printing/nt_printing_migrate.c b/source3/printing/nt_printing_migrate.c
index 8d0551c774d..e122934c494 100644
--- a/source3/printing/nt_printing_migrate.c
+++ b/source3/printing/nt_printing_migrate.c
@@ -459,10 +459,6 @@ static NTSTATUS migrate_secdesc(TALLOC_CTX *mem_ctx,
key_name, nt_errstr(status)));
return status;
}
- if (W_ERROR_EQUAL(WERR_INVALID_PRINTER_NAME, result)) {
- DEBUG(3, ("Ignoring missing printer %s\n", key_name));
- return NT_STATUS_OK;
- }
if (!W_ERROR_IS_OK(result)) {
DEBUG(2, ("OpenPrinter(%s) failed: %s\n",
key_name, win_errstr(result)));
@@ -588,13 +584,20 @@ static NTSTATUS migrate_internal(TALLOC_CTX *mem_ctx,
}
if (strncmp((const char *) kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) {
+ const char *printer_name = (const char *)(kbuf.dptr
+ + strlen(PRINTERS_PREFIX));
status = migrate_printer(mem_ctx,
pipe_hnd,
- (const char *) kbuf.dptr + strlen(PRINTERS_PREFIX),
+ printer_name,
dbuf.dptr,
dbuf.dsize);
SAFE_FREE(dbuf.dptr);
- if (!NT_STATUS_IS_OK(status)) {
+ /* currently no WERR_INVALID_PRINTER_NAME equivalent */
+ if (NT_STATUS_EQUAL(status,
+ werror_to_ntstatus(WERR_INVALID_PRINTER_NAME))) {
+ DEBUG(2, ("Skipping migration for non-existent "
+ "printer: %s\n", printer_name));
+ } else if (!NT_STATUS_IS_OK(status)) {
tdb_close(tdb);
return status;
}
@@ -602,13 +605,20 @@ static NTSTATUS migrate_internal(TALLOC_CTX *mem_ctx,
}
if (strncmp((const char *) kbuf.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX)) == 0) {
+ const char *secdesc_name = (const char *)(kbuf.dptr
+ + strlen(SECDESC_PREFIX));
status = migrate_secdesc(mem_ctx,
pipe_hnd,
- (const char *) kbuf.dptr + strlen(SECDESC_PREFIX),
+ secdesc_name,
dbuf.dptr,
dbuf.dsize);
SAFE_FREE(dbuf.dptr);
- if (!NT_STATUS_IS_OK(status)) {
+ /* currently no WERR_INVALID_PRINTER_NAME equivalent */
+ if (NT_STATUS_EQUAL(status,
+ werror_to_ntstatus(WERR_INVALID_PRINTER_NAME))) {
+ DEBUG(2, ("Skipping migration for non-existent "
+ "secdesc: %s\n", secdesc_name));
+ } else if (!NT_STATUS_IS_OK(status)) {
tdb_close(tdb);
return status;
}