Recreate the SMB context after rmdir. - susmb - mounting of SMB/CIFS shares via… | |
git clone git://git.codemadness.org/susmb | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 28181b82defdd54e029e6c8fbb574df2b4179403 | |
parent 961d7b55bb0eaca2712282c4b374c61c481df2c0 | |
Author: Geoff Johnstone <[email protected]> | |
Date: Thu, 26 Feb 2009 22:11:05 +0000 | |
Recreate the SMB context after rmdir. | |
Diffstat: | |
M Makefile | 2 +- | |
M conffile.c | 2 +- | |
M conffile.h | 2 +- | |
M options.c | 2 +- | |
M options.h | 2 +- | |
M password.c | 2 +- | |
M password.h | 2 +- | |
M samba30-compat.h | 2 +- | |
M usmb.c | 22 +++++++++++++++++++++- | |
M usmb.h | 4 +++- | |
M usmb_dir.c | 8 +++++++- | |
M usmb_dir.h | 2 +- | |
M usmb_file.c | 5 +++-- | |
M usmb_file.h | 2 +- | |
M utils.c | 2 +- | |
M utils.h | 2 +- | |
M version.c | 4 ++-- | |
M version.h | 4 ++-- | |
M xml.c | 2 +- | |
M xml.h | 2 +- | |
20 files changed, 52 insertions(+), 23 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
@@ -1,5 +1,5 @@ | |
# usmb - mount SMB shares via FUSE and Samba | |
-# Copyright (C) 2006-2008 Geoff Johnstone | |
+# Copyright (C) 2006-2009 Geoff Johnstone | |
# | |
# This program is free software; you can redistribute it and/or modify | |
# it under the terms of the GNU General Public License version 3 as | |
diff --git a/conffile.c b/conffile.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/conffile.h b/conffile.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/options.c b/options.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/options.h b/options.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/password.c b/password.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/password.h b/password.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/samba30-compat.h b/samba30-compat.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* Portions of this file are taken from Samba 3.2's libsmbclient.h: | |
* Copyright (C) Andrew Tridgell 1998 | |
diff --git a/usmb.c b/usmb.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
@@ -279,6 +279,26 @@ static bool get_context (void) | |
} | |
+bool renew_smb_context (void) | |
+{ | |
+ SMBCCTX *newctx; | |
+ | |
+ DEBUG (fputs ("renew_smb_context()\n", stderr)); | |
+ | |
+ if (!create_smb_context (domain, username, &newctx)) | |
+ { | |
+ fputs ("Failed to create new SMB context.\n", stderr); | |
+ return false; | |
+ } | |
+ | |
+ if (NULL != ctx) | |
+ destroy_smb_context (ctx, 0); | |
+ | |
+ ctx = newctx; | |
+ return true; | |
+} | |
+ | |
+ | |
int main (int argc, char **argv) | |
{ | |
const char *conffile, *mountid; | |
diff --git a/usmb.h b/usmb.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
@@ -17,12 +17,14 @@ | |
#ifndef USMB_H | |
#define USMB_H | |
+ #include <stdbool.h> | |
#include <libsmbclient.h> | |
extern SMBCCTX *ctx; | |
char * make_url (const char *path) MUSTCHECK; | |
+ bool renew_smb_context (void); | |
/* fuse_file_info uses a uint64_t for a "File handle" */ | |
static inline uint64_t smbcfile_to_fd (SMBCFILE *file) | |
diff --git a/usmb_dir.c b/usmb_dir.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
@@ -52,6 +52,10 @@ int usmb_rmdir (const char *dirname) | |
DEBUG (fprintf (stderr, "rmdir (%s)\n", url)); | |
int ret = smbc_getFunctionRmdir (ctx) (ctx, url) ? -errno : 0; | |
free (url); | |
+ | |
+ if (0 == ret) | |
+ (void)renew_smb_context(); | |
+ | |
return ret; | |
} | |
@@ -82,6 +86,7 @@ int usmb_readdir (const char *path UNUSED, void *h, fuse_fill… | |
SMBCFILE *file = fd_to_smbcfile (fi->fh); | |
DEBUG (fprintf (stderr, "readdir (%s, %p)\n", path, (void *)file)); | |
+ smbc_getFunctionLseekdir (ctx) (ctx, file, 0); | |
while (NULL != (dirent = smbc_getFunctionReaddir (ctx) (ctx, file))) | |
{ | |
@@ -105,6 +110,7 @@ int usmb_readdir (const char *path UNUSED, void *h, fuse_fi… | |
break; | |
} | |
+ DEBUG (fprintf (stderr, " %s\n", dirent->name)); | |
if (1 == filler (h, dirent->name, &stbuf, 0)) /* if error */ | |
return -1; | |
} | |
diff --git a/usmb_dir.h b/usmb_dir.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/usmb_file.c b/usmb_file.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
@@ -44,7 +44,8 @@ static bool fix_nlink (const char *url, struct stat *st) | |
if (NULL == file) | |
return false; | |
- st->st_nlink = 2; | |
+ // st->st_nlink = 2; | |
+ st->st_nlink = 0; | |
errno = ERANGE; | |
struct smbc_dirent *dirent; | |
diff --git a/usmb_file.h b/usmb_file.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/utils.c b/utils.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/utils.h b/utils.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/version.c b/version.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
@@ -33,7 +33,7 @@ void show_about (FILE *fp) | |
{ | |
fprintf (fp, "usmb - mount SMB shares via FUSE and Samba\n" | |
"\n" | |
- "Copyright (C) 2006-2008 Geoff Johnstone.\n" | |
+ "Copyright (C) 2006-2009 Geoff Johnstone.\n" | |
"Licensed under the GNU General Public License.\n" | |
"usmb comes with ABSOLUTELY NO WARRANTY; " | |
"for details please see\n" | |
diff --git a/version.h b/version.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
@@ -19,7 +19,7 @@ | |
#include <stdio.h> | |
- #define USMB_VERSION 0x20081220 | |
+ #define USMB_VERSION 0x20090227 | |
// a - alpha, b - beta, p - pre-release, s - stable | |
#define USMB_VERSION_STATUS 's' | |
diff --git a/xml.c b/xml.c | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as | |
diff --git a/xml.h b/xml.h | |
@@ -1,5 +1,5 @@ | |
/* usmb - mount SMB shares via FUSE and Samba | |
- * Copyright (C) 2006-2008 Geoff Johnstone | |
+ * Copyright (C) 2006-2009 Geoff Johnstone | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 3 as |