~zulcss/samba/server-dailies-3.4

« back to all changes in this revision

Viewing changes to source3/include/libsmb_internal.h

  • Committer: Chuck Short
  • Date: 2010-09-28 20:38:39 UTC
  • Revision ID: zulcss@ubuntu.com-20100928203839-pgjulytsi9ue63x1
Initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* 
 
2
   Unix SMB/Netbios implementation.
 
3
   SMB client library implementation
 
4
   Copyright (C) Andrew Tridgell 1998
 
5
   Copyright (C) Richard Sharpe 2000, 2002
 
6
   Copyright (C) John Terpstra 2000
 
7
   Copyright (C) Tom Jansen (Ninja ISD) 2002 
 
8
   Copyright (C) Derrell Lipman 2003-2008
 
9
   Copyright (C) Jeremy Allison 2007, 2008
 
10
   
 
11
   This program is free software; you can redistribute it and/or modify
 
12
   it under the terms of the GNU General Public License as published by
 
13
   the Free Software Foundation; either version 3 of the License, or
 
14
   (at your option) any later version.
 
15
   
 
16
   This program is distributed in the hope that it will be useful,
 
17
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
18
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
19
   GNU General Public License for more details.
 
20
   
 
21
   You should have received a copy of the GNU General Public License
 
22
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
23
*/
 
24
 
 
25
#include "includes.h"
 
26
 
 
27
 
 
28
#ifndef _LIBSMB_INTERNAL_H_
 
29
#define _LIBSMB_INTERNAL_H_
 
30
 
 
31
#include "../include/libsmbclient.h"
 
32
 
 
33
#define SMBC_MAX_NAME  1023
 
34
#define SMBC_FILE_MODE (S_IFREG | 0444)
 
35
#define SMBC_DIR_MODE  (S_IFDIR | 0555)
 
36
 
 
37
/*
 
38
 * DOS Attribute values (used internally)
 
39
 */
 
40
typedef struct DOS_ATTR_DESC {
 
41
        int mode;
 
42
        SMB_OFF_T size;
 
43
        time_t create_time;
 
44
        time_t access_time;
 
45
        time_t write_time;
 
46
        time_t change_time;
 
47
        SMB_INO_T inode;
 
48
} DOS_ATTR_DESC;
 
49
 
 
50
 
 
51
/*
 
52
 * Internal flags for extended attributes
 
53
 */
 
54
 
 
55
/* internal mode values */
 
56
#define SMBC_XATTR_MODE_ADD          1
 
57
#define SMBC_XATTR_MODE_REMOVE       2
 
58
#define SMBC_XATTR_MODE_REMOVE_ALL   3
 
59
#define SMBC_XATTR_MODE_SET          4
 
60
#define SMBC_XATTR_MODE_CHOWN        5
 
61
#define SMBC_XATTR_MODE_CHGRP        6
 
62
 
 
63
#define CREATE_ACCESS_READ      READ_CONTROL_ACCESS
 
64
 
 
65
/*We should test for this in configure ... */
 
66
#ifndef ENOTSUP
 
67
#define ENOTSUP EOPNOTSUPP
 
68
#endif
 
69
 
 
70
 
 
71
struct _SMBCSRV {
 
72
        struct cli_state *cli;
 
73
        dev_t dev;
 
74
        bool no_pathinfo;
 
75
        bool no_pathinfo2;
 
76
        bool no_nt_session;
 
77
        struct policy_handle pol;
 
78
 
 
79
        SMBCSRV *next, *prev;
 
80
        
 
81
};
 
82
 
 
83
/* 
 
84
 * Keep directory entries in a list 
 
85
 */
 
86
struct smbc_dir_list {
 
87
        struct smbc_dir_list *next;
 
88
        struct smbc_dirent *dirent;
 
89
};
 
90
 
 
91
 
 
92
/*
 
93
 * Structure for open file management
 
94
 */ 
 
95
struct _SMBCFILE {
 
96
        int cli_fd; 
 
97
        char *fname;
 
98
        SMB_OFF_T offset;
 
99
        struct _SMBCSRV *srv;
 
100
        bool file;
 
101
        struct smbc_dir_list *dir_list, *dir_end, *dir_next;
 
102
        int dir_type, dir_error;
 
103
 
 
104
        SMBCFILE *next, *prev;
 
105
};
 
106
 
 
107
 
 
108
/*
 
109
 * Context structure
 
110
 */
 
111
struct SMBC_internal_data {
 
112
 
 
113
        /* True when this handle is initialized */
 
114
        bool                                    initialized;
 
115
 
 
116
        /* dirent pointer location */
 
117
        struct smbc_dirent                      dirent;
 
118
        /*
 
119
         * Leave room for any urlencoded filename and the comment field.
 
120
         *
 
121
         * We use (NAME_MAX * 3) plus whatever the max length of a comment is,
 
122
         * plus a couple of null terminators (one after the filename,
 
123
         * one after the comment).
 
124
         *
 
125
         * According to <linux/limits.h>, NAME_MAX is 255.  Is it longer
 
126
         * anyplace else?
 
127
         */
 
128
        char                                    _dirent_name[1024];
 
129
 
 
130
        /*
 
131
         * server connection list
 
132
         */
 
133
        SMBCSRV *                               servers;
 
134
        
 
135
        /*
 
136
         * open file/dir list
 
137
         */
 
138
        SMBCFILE *                              files;
 
139
 
 
140
        /*
 
141
         * Log to standard error instead of the more typical standard output
 
142
         */
 
143
        bool                                    debug_stderr;
 
144
 
 
145
        /*
 
146
         * Support "Create Time" in get/set with the *xattr() functions, if
 
147
         * true.  This replaces the dos attribute strings C_TIME, A_TIME and
 
148
         * M_TIME with CHANGE_TIME, ACCESS_TIME and WRITE_TIME, and adds
 
149
         * CREATE_TIME.  Default is FALSE, i.e.  to use the old-style shorter
 
150
         * names and to not support CREATE time, for backward compatibility.
 
151
         */
 
152
        bool                                    full_time_names;
 
153
 
 
154
        /*
 
155
         * The share mode of a file being opened.  To match POSIX semantics
 
156
         * (and maintain backward compatibility), DENY_NONE is the default.
 
157
         */
 
158
        smbc_share_mode                         share_mode;
 
159
 
 
160
        /*
 
161
         * Authentication function which includes the context.  This will be
 
162
         * used if set; otherwise context->callbacks.auth_fn() will be used.
 
163
         */
 
164
        smbc_get_auth_data_with_context_fn      auth_fn_with_context;
 
165
 
 
166
        /*
 
167
         * An opaque (to this library) user data handle which can be set
 
168
         * and retrieved with smbc_option_set() and smbc_option_get().
 
169
         */
 
170
        void *                                  user_data;
 
171
 
 
172
        /*
 
173
         * Should we attempt UNIX smb encryption ? 
 
174
         * Set to 0 if we should never attempt, set to 1 if
 
175
         * encryption requested, set to 2 if encryption required.
 
176
         */
 
177
        smbc_smb_encrypt_level                  smb_encryption_level;
 
178
 
 
179
        /*
 
180
         * Should we request case sensitivity of file names?
 
181
         */
 
182
        bool                                    case_sensitive;
 
183
 
 
184
        /*
 
185
         * Auth info needed for DFS traversal.
 
186
         */
 
187
 
 
188
        struct user_auth_info                   *auth_info;
 
189
 
 
190
        struct smbc_server_cache * server_cache;
 
191
 
 
192
        /* POSIX emulation functions */
 
193
        struct
 
194
        {
 
195
#if 0 /* Left in libsmbclient.h for backward compatibility */
 
196
                smbc_open_fn                    open_fn;
 
197
                smbc_creat_fn                   creat_fn;
 
198
                smbc_read_fn                    read_fn;
 
199
                smbc_write_fn                   write_fn;
 
200
                smbc_unlink_fn                  unlink_fn;
 
201
                smbc_rename_fn                  rename_fn;
 
202
                smbc_lseek_fn                   lseek_fn;
 
203
                smbc_stat_fn                    stat_fn;
 
204
                smbc_fstat_fn                   fstat_fn;
 
205
#endif
 
206
                smbc_statvfs_fn                 statvfs_fn;
 
207
                smbc_fstatvfs_fn                fstatvfs_fn;
 
208
                smbc_ftruncate_fn               ftruncate_fn;
 
209
#if 0 /* Left in libsmbclient.h for backward compatibility */
 
210
                smbc_close_fn                   close_fn;
 
211
                smbc_opendir_fn                 opendir_fn;
 
212
                smbc_closedir_fn                closedir_fn;
 
213
                smbc_readdir_fn                 readdir_fn;
 
214
                smbc_getdents_fn                getdents_fn;
 
215
                smbc_mkdir_fn                   mkdir_fn;
 
216
                smbc_rmdir_fn                   rmdir_fn;
 
217
                smbc_telldir_fn                 telldir_fn;
 
218
                smbc_lseekdir_fn                lseekdir_fn;
 
219
                smbc_fstatdir_fn                fstatdir_fn;
 
220
                smbc_chmod_fn                   chmod_fn;
 
221
                smbc_utimes_fn                  utimes_fn;
 
222
                smbc_setxattr_fn                setxattr_fn;
 
223
                smbc_getxattr_fn                getxattr_fn;
 
224
                smbc_removexattr_fn             removexattr_fn;
 
225
                smbc_listxattr_fn               listxattr_fn;
 
226
#endif
 
227
        }               posix_emu;
 
228
 
 
229
#if 0 /* Left in libsmbclient.h for backward compatibility */
 
230
        /* Printing-related functions */
 
231
        struct
 
232
        {
 
233
                smbc_print_file_fn              print_file_fn;
 
234
                smbc_open_print_job_fn          open_print_job_fn;
 
235
                smbc_list_print_jobs_fn         list_print_jobs_fn;
 
236
                smbc_unlink_print_job_fn        unlink_print_job_fn;
 
237
        }               printing;
 
238
#endif
 
239
 
 
240
#if 0 /* None available yet */
 
241
        /* SMB high-level functions */
 
242
        struct
 
243
        {
 
244
        }               smb;
 
245
 
 
246
#endif
 
247
};      
 
248
 
 
249
/* Functions in libsmb_cache.c */
 
250
int
 
251
SMBC_add_cached_server(SMBCCTX * context,
 
252
                       SMBCSRV * newsrv,
 
253
                       const char * server,
 
254
                       const char * share, 
 
255
                       const char * workgroup,
 
256
                       const char * username);
 
257
 
 
258
SMBCSRV *
 
259
SMBC_get_cached_server(SMBCCTX * context,
 
260
                       const char * server, 
 
261
                       const char * share,
 
262
                       const char * workgroup,
 
263
                       const char * user);
 
264
 
 
265
int
 
266
SMBC_remove_cached_server(SMBCCTX * context,
 
267
                          SMBCSRV * server);
 
268
 
 
269
int
 
270
SMBC_purge_cached_servers(SMBCCTX * context);
 
271
 
 
272
 
 
273
/* Functions in libsmb_dir.c */
 
274
int
 
275
SMBC_check_options(char *server,
 
276
                   char *share,
 
277
                   char *path,
 
278
                   char *options);
 
279
 
 
280
SMBCFILE *
 
281
SMBC_opendir_ctx(SMBCCTX *context,
 
282
                 const char *fname);
 
283
 
 
284
int
 
285
SMBC_closedir_ctx(SMBCCTX *context,
 
286
                  SMBCFILE *dir);
 
287
 
 
288
struct smbc_dirent *
 
289
SMBC_readdir_ctx(SMBCCTX *context,
 
290
                 SMBCFILE *dir);
 
291
 
 
292
int
 
293
SMBC_getdents_ctx(SMBCCTX *context,
 
294
                  SMBCFILE *dir,
 
295
                  struct smbc_dirent *dirp,
 
296
                  int count);
 
297
 
 
298
int
 
299
SMBC_mkdir_ctx(SMBCCTX *context,
 
300
               const char *fname,
 
301
               mode_t mode);
 
302
 
 
303
int
 
304
SMBC_rmdir_ctx(SMBCCTX *context,
 
305
               const char *fname);
 
306
 
 
307
off_t
 
308
SMBC_telldir_ctx(SMBCCTX *context,
 
309
                 SMBCFILE *dir);
 
310
 
 
311
int
 
312
SMBC_lseekdir_ctx(SMBCCTX *context,
 
313
                  SMBCFILE *dir,
 
314
                  off_t offset);
 
315
 
 
316
int
 
317
SMBC_fstatdir_ctx(SMBCCTX *context,
 
318
                  SMBCFILE *dir,
 
319
                  struct stat *st);
 
320
 
 
321
int
 
322
SMBC_chmod_ctx(SMBCCTX *context,
 
323
               const char *fname,
 
324
               mode_t newmode);
 
325
 
 
326
int
 
327
SMBC_utimes_ctx(SMBCCTX *context,
 
328
                const char *fname,
 
329
                struct timeval *tbuf);
 
330
 
 
331
int
 
332
SMBC_unlink_ctx(SMBCCTX *context,
 
333
                const char *fname);
 
334
 
 
335
int
 
336
SMBC_rename_ctx(SMBCCTX *ocontext,
 
337
                const char *oname, 
 
338
                SMBCCTX *ncontext,
 
339
                const char *nname);
 
340
 
 
341
 
 
342
/* Functions in libsmb_file.c */
 
343
SMBCFILE *
 
344
SMBC_open_ctx(SMBCCTX *context,
 
345
              const char *fname,
 
346
              int flags,
 
347
              mode_t mode);
 
348
 
 
349
SMBCFILE *
 
350
SMBC_creat_ctx(SMBCCTX *context,
 
351
               const char *path,
 
352
               mode_t mode);
 
353
 
 
354
ssize_t
 
355
SMBC_read_ctx(SMBCCTX *context,
 
356
              SMBCFILE *file,
 
357
              void *buf,
 
358
              size_t count);
 
359
 
 
360
ssize_t
 
361
SMBC_write_ctx(SMBCCTX *context,
 
362
               SMBCFILE *file,
 
363
               const void *buf,
 
364
               size_t count);
 
365
 
 
366
int
 
367
SMBC_close_ctx(SMBCCTX *context,
 
368
               SMBCFILE *file);
 
369
 
 
370
bool
 
371
SMBC_getatr(SMBCCTX * context,
 
372
            SMBCSRV *srv,
 
373
            char *path,
 
374
            uint16 *mode,
 
375
            SMB_OFF_T *size,
 
376
            struct timespec *create_time_ts,
 
377
            struct timespec *access_time_ts,
 
378
            struct timespec *write_time_ts,
 
379
            struct timespec *change_time_ts,
 
380
            SMB_INO_T *ino);
 
381
 
 
382
bool
 
383
SMBC_setatr(SMBCCTX * context, SMBCSRV *srv, char *path, 
 
384
            time_t create_time,
 
385
            time_t access_time,
 
386
            time_t write_time,
 
387
            time_t change_time,
 
388
            uint16 mode);
 
389
 
 
390
off_t
 
391
SMBC_lseek_ctx(SMBCCTX *context,
 
392
               SMBCFILE *file,
 
393
               off_t offset,
 
394
               int whence);
 
395
 
 
396
int
 
397
SMBC_ftruncate_ctx(SMBCCTX *context,
 
398
                   SMBCFILE *file,
 
399
                   off_t length);
 
400
 
 
401
 
 
402
/* Functions in libsmb_misc.c */
 
403
int
 
404
SMBC_dlist_contains(SMBCFILE * list, SMBCFILE *p);
 
405
 
 
406
int
 
407
SMBC_errno(SMBCCTX *context,
 
408
           struct cli_state *c);
 
409
 
 
410
 
 
411
/* Functions in libsmb_path.c */
 
412
int
 
413
SMBC_parse_path(TALLOC_CTX *ctx,
 
414
                SMBCCTX *context,
 
415
                const char *fname,
 
416
                char **pp_workgroup,
 
417
                char **pp_server,
 
418
                char **pp_share,
 
419
                char **pp_path,
 
420
                char **pp_user,
 
421
                char **pp_password,
 
422
                char **pp_options);
 
423
 
 
424
 
 
425
/* Functions in libsmb_printjob.c */
 
426
SMBCFILE *
 
427
SMBC_open_print_job_ctx(SMBCCTX *context,
 
428
                        const char *fname);
 
429
 
 
430
int
 
431
SMBC_print_file_ctx(SMBCCTX *c_file,
 
432
                    const char *fname,
 
433
                    SMBCCTX *c_print,
 
434
                    const char *printq);
 
435
 
 
436
int
 
437
SMBC_list_print_jobs_ctx(SMBCCTX *context,
 
438
                         const char *fname,
 
439
                         smbc_list_print_job_fn fn);
 
440
 
 
441
int
 
442
SMBC_unlink_print_job_ctx(SMBCCTX *context,
 
443
                          const char *fname,
 
444
                          int id);
 
445
 
 
446
 
 
447
/* Functions in libsmb_server.c */
 
448
int
 
449
SMBC_check_server(SMBCCTX * context,
 
450
                  SMBCSRV * server);
 
451
 
 
452
int
 
453
SMBC_remove_unused_server(SMBCCTX * context,
 
454
                          SMBCSRV * srv);
 
455
 
 
456
void
 
457
SMBC_call_auth_fn(TALLOC_CTX *ctx,
 
458
                  SMBCCTX *context,
 
459
                  const char *server,
 
460
                  const char *share,
 
461
                  char **pp_workgroup,
 
462
                  char **pp_username,
 
463
                  char **pp_password);
 
464
 
 
465
void
 
466
SMBC_get_auth_data(const char *server, const char *share,
 
467
                   char *workgroup_buf, int workgroup_buf_len,
 
468
                   char *username_buf, int username_buf_len,
 
469
                   char *password_buf, int password_buf_len);
 
470
 
 
471
SMBCSRV *
 
472
SMBC_find_server(TALLOC_CTX *ctx,
 
473
                 SMBCCTX *context,
 
474
                 const char *server,
 
475
                 const char *share,
 
476
                 char **pp_workgroup,
 
477
                 char **pp_username,
 
478
                 char **pp_password);
 
479
 
 
480
SMBCSRV *
 
481
SMBC_server(TALLOC_CTX *ctx,
 
482
            SMBCCTX *context,
 
483
            bool connect_if_not_found,
 
484
            const char *server,
 
485
            const char *share,
 
486
            char **pp_workgroup,
 
487
            char **pp_username,
 
488
            char **pp_password);
 
489
 
 
490
SMBCSRV *
 
491
SMBC_attr_server(TALLOC_CTX *ctx,
 
492
                 SMBCCTX *context,
 
493
                 const char *server,
 
494
                 const char *share,
 
495
                 char **pp_workgroup,
 
496
                 char **pp_username,
 
497
                 char **pp_password);
 
498
 
 
499
 
 
500
/* Functions in libsmb_stat.c */
 
501
int
 
502
SMBC_stat_ctx(SMBCCTX *context,
 
503
              const char *fname,
 
504
              struct stat *st);
 
505
 
 
506
int
 
507
SMBC_fstat_ctx(SMBCCTX *context,
 
508
               SMBCFILE *file,
 
509
               struct stat *st);
 
510
 
 
511
 
 
512
int
 
513
SMBC_statvfs_ctx(SMBCCTX *context,
 
514
                 char *path,
 
515
                 struct statvfs *st);
 
516
 
 
517
 
 
518
int
 
519
SMBC_fstatvfs_ctx(SMBCCTX *context,
 
520
                  SMBCFILE *file,
 
521
                  struct statvfs *st);
 
522
 
 
523
 
 
524
/* Functions in libsmb_xattr.c */
 
525
int
 
526
SMBC_setxattr_ctx(SMBCCTX *context,
 
527
                  const char *fname,
 
528
                  const char *name,
 
529
                  const void *value,
 
530
                  size_t size,
 
531
                  int flags);
 
532
 
 
533
int
 
534
SMBC_getxattr_ctx(SMBCCTX *context,
 
535
                  const char *fname,
 
536
                  const char *name,
 
537
                  const void *value,
 
538
                  size_t size);
 
539
 
 
540
int
 
541
SMBC_removexattr_ctx(SMBCCTX *context,
 
542
                     const char *fname,
 
543
                     const char *name);
 
544
 
 
545
int
 
546
SMBC_listxattr_ctx(SMBCCTX *context,
 
547
                   const char *fname,
 
548
                   char *list,
 
549
                   size_t size);
 
550
 
 
551
 
 
552
#endif