diff options
author | Günther Deschner <gd@samba.org> | 2011-07-05 14:01:40 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2011-07-26 21:53:12 +0200 |
commit | 4110411f532f340569c4f4dc6aaf21190e409ff3 (patch) | |
tree | 9eb98e4229d58ce0a8a8cd4b821e7e8b9b0a4af9 | |
parent | 0aec19d0181d02eb3ff6e0de7c603671014b4981 (diff) | |
download | samba-4110411f532f340569c4f4dc6aaf21190e409ff3.tar.gz samba-4110411f532f340569c4f4dc6aaf21190e409ff3.tar.xz samba-4110411f532f340569c4f4dc6aaf21190e409ff3.zip |
s3-printing: make sure to first migrate the printers then the security descriptor.
Guenther
Pair-Programmed-With: David Disseldorp <ddiss@suse.de>
(cherry picked from commit cfc3b6e5f79f253e83dfbd13d47b671deb5801b3)
(cherry picked from commit d967d1b9ac902cd750cc9c43ecce9481c444504b)
-rw-r--r-- | source3/printing/nt_printing_migrate_internal.c | 20 | ||||
-rw-r--r-- | source3/utils/net_printing.c | 12 |
2 files changed, 28 insertions, 4 deletions
diff --git a/source3/printing/nt_printing_migrate_internal.c b/source3/printing/nt_printing_migrate_internal.c index f298863d7cb..84b0c314e0d 100644 --- a/source3/printing/nt_printing_migrate_internal.c +++ b/source3/printing/nt_printing_migrate_internal.c @@ -143,6 +143,17 @@ static NTSTATUS migrate_internal(TALLOC_CTX *mem_ctx, } continue; } + SAFE_FREE(dbuf.dptr); + } + + for (kbuf = tdb_firstkey(tdb); + kbuf.dptr; + newkey = tdb_nextkey(tdb, kbuf), free(kbuf.dptr), kbuf = newkey) + { + dbuf = tdb_fetch(tdb, kbuf); + if (!dbuf.dptr) { + continue; + } if (strncmp((const char *) kbuf.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX)) == 0) { const char *secdesc_name = (const char *)(kbuf.dptr @@ -154,16 +165,17 @@ static NTSTATUS migrate_internal(TALLOC_CTX *mem_ctx, dbuf.dsize); SAFE_FREE(dbuf.dptr); /* 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)); + if (NT_STATUS_EQUAL(status, werror_to_ntstatus(WERR_INVALID_PRINTER_NAME)) || + NT_STATUS_EQUAL(status, werror_to_ntstatus(WERR_BADFILE))) { + DEBUG(2, ("Skipping secdesc migration for non-existent " + "printer: %s\n", secdesc_name)); } else if (!NT_STATUS_IS_OK(status)) { tdb_close(tdb); return status; } continue; } + SAFE_FREE(dbuf.dptr); } tdb_close(tdb); diff --git a/source3/utils/net_printing.c b/source3/utils/net_printing.c index 29973edc1cb..a52d31faf7d 100644 --- a/source3/utils/net_printing.c +++ b/source3/utils/net_printing.c @@ -284,6 +284,17 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, SAFE_FREE(dbuf.dptr); continue; } + SAFE_FREE(dbuf.dptr); + } + + for (kbuf = tdb_firstkey(tdb); + kbuf.dptr; + newkey = tdb_nextkey(tdb, kbuf), free(kbuf.dptr), kbuf = newkey) + { + dbuf = tdb_fetch(tdb, kbuf); + if (!dbuf.dptr) { + continue; + } if (strncmp((const char *) kbuf.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX)) == 0) { printing_tdb_migrate_secdesc(tmp_ctx, @@ -294,6 +305,7 @@ static NTSTATUS printing_migrate_internal(struct net_context *c, SAFE_FREE(dbuf.dptr); continue; } + SAFE_FREE(dbuf.dptr); } |