summaryrefslogtreecommitdiff
path: root/source3/smbd/ipc.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd/ipc.c')
-rw-r--r--source3/smbd/ipc.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c
index 3e16dba4f5..b5a6e4ba90 100644
--- a/source3/smbd/ipc.c
+++ b/source3/smbd/ipc.c
@@ -2055,6 +2055,7 @@ static BOOL api_PrintJobInfo(connection_struct *conn,uint16 vuid,char *param,cha
if (isalpha((int)*s)) {
pstring name;
int l = 0;
+
while (l<64 && *s) {
if (issafe(*s)) name[l++] = *s;
s++;
@@ -2066,17 +2067,23 @@ static BOOL api_PrintJobInfo(connection_struct *conn,uint16 vuid,char *param,cha
fsp = file_find_print();
if (fsp) {
- connection_struct *fconn = fsp->conn;
- unbecome_user();
-
- if (!become_user(fconn,vuid) ||
- !become_service(fconn,True))
- break;
+ pstring zfrom,zto;
+ connection_struct *fconn = fsp->conn;
+
+ unbecome_user();
- if (fsp->conn->vfs_ops.rename(fsp->fsp_name,name) == 0) {
- string_set(&fsp->fsp_name,name);
- }
- break;
+ if (!become_user(fconn,vuid) ||
+ !become_service(fconn,True))
+ break;
+
+ pstrcpy(zfrom, dos_to_unix(fsp->fsp_name,False));
+ pstrcpy(zto, dos_to_unix(name,False));
+
+ if (fsp->conn->vfs_ops.rename(zfrom,zto) == 0) {
+ string_set(&fsp->fsp_name,name);
+ }
+
+ break;
}
}
desc.errcode=NERR_Success;