fss: store state after shadow copy set abort
authorDavid Disseldorp <ddiss@samba.org>
Mon, 29 Apr 2013 14:33:26 +0000 (16:33 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Wed, 8 May 2013 10:21:37 +0000 (12:21 +0200)
diskshadow.exe immediately aborts any shadow copy set for which a commit
fails. FSRVP server state should be saved to disk after this occurs.

source3/rpc_server/fss/srv_fss_agent.c

index 78628f9bb9ca50614f25b3d5f1f3bd8d62fbf801..99f406e9defc192fcfb6962a1a68c0a930439171 100644 (file)
@@ -1106,6 +1106,7 @@ uint32_t _fss_RecoveryCompleteShadowCopySet(struct pipes_struct *p,
 uint32_t _fss_AbortShadowCopySet(struct pipes_struct *p,
                                 struct fss_AbortShadowCopySet *r)
 {
+       NTSTATUS status;
        struct fss_sc_set *sc_set;
 
        if (!fss_permitted(p)) {
@@ -1134,6 +1135,14 @@ uint32_t _fss_AbortShadowCopySet(struct pipes_struct *p,
        DLIST_REMOVE(fss_global.sc_sets, sc_set);
        talloc_free(sc_set);
        fss_global.sc_sets_count--;
+       become_root();
+       status = fss_state_store(fss_global.mem_ctx, fss_global.sc_sets,
+                                fss_global.sc_sets_count, fss_global.db_path);
+       unbecome_root();
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(1, ("failed to store fss server state: %s\n",
+                         nt_errstr(status)));
+       }
 
        return 0;
 }