librpc: Use the fact that file_save() now uses O_EXCL in dcerpc_log_packet()
authorAndrew Bartlett <abartlet@samba.org>
Mon, 11 Nov 2019 00:53:33 +0000 (13:53 +1300)
committerAndreas Schneider <asn@cryptomilk.org>
Fri, 15 Nov 2019 18:48:27 +0000 (18:48 +0000)
This avoids a race with file_exist() and demostrates a better
way to use this function.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Fri Nov 15 18:48:27 UTC 2019 on sn-devel-184

librpc/rpc/dcerpc_util.c

index 01dc2e7061d8e3a9e1590d30b99bb693ac2a1c43..1fb3fa720753b463170874b1cf4e151d4e47fdc9 100644 (file)
@@ -1425,19 +1425,19 @@ void dcerpc_log_packet(const char *lockdir,
        for (i=0;i<num_examples;i++) {
                char *name=NULL;
                int ret;
+               bool saved;
                ret = asprintf(&name, "%s/rpclog/%s-%u.%d.%s",
                               lockdir, ndr->name, opnum, i,
                               (flags&NDR_IN)?"in":"out");
                if (ret == -1) {
                        return;
                }
-               if (!file_exist(name)) {
-                       if (file_save(name, pkt->data, pkt->length)) {
-                               DEBUG(10,("Logged rpc packet to %s\n", name));
-                       }
-                       free(name);
+
+               saved = file_save(name, pkt->data, pkt->length);
+               free(name);
+               if (saved) {
+                       DBG_DEBUG("Logged rpc packet to %s\n", name);
                        break;
                }
-               free(name);
        }
 }