ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/SambaTest/SambaTest.cpp
Revision: 419
Committed: 2005-03-04T18:02:25-08:00 (20 years, 3 months ago) by douglas
File size: 2172 byte(s)
Log Message:
Meep!

File Contents

# User Rev Content
1 douglas 410 // Samba Test
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #include <iostream>
8     #include <string>
9     #include <cstdio>
10     #include <cstring>
11    
12     #include <errno.h>
13     #include <pwd.h>
14     #include <unistd.h>
15     #include <libsmbclient.h>
16    
17     struct Exception
18     {
19     int code;
20     Exception(int code) : code(code) {}
21     };
22    
23     std::ostream& operator<<(std::ostream& out, const Exception& exception)
24     {
25     return out << "Exception(" << exception.code << ")[" << ::strerror(exception.code) << ']';
26     }
27    
28     inline int check(int code)
29     {
30     if (code < 0) throw Exception(errno);
31    
32     return code;
33     }
34    
35     extern "C"
36     {
37     void authenticate(const char* srv, const char* shr, char* wg, int wglen, char* un, int unlen, char* pw, int pwlen)
38     {
39     std::cout << "srv = " << srv << std::endl << "shr = " << shr << std::endl << "wg = " << wg << std::endl << "un = " << un << std::endl << "un = ";
40    
41     std::string line;
42    
43     std::getline(std::cin, line);
44    
45 douglas 412 if (!line.empty()) ::snprintf(un, unlen, line.c_str());
46 douglas 410
47 douglas 412 ::snprintf(pw, pwlen, "%s", ::getpass("pw = "));
48 douglas 410 }
49     }
50    
51     int main(int argc, char* argv[])
52     {
53     std::string uri("smb://");
54    
55     for (int index(1); index < argc; ++index)
56     {
57     uri += argv[index];
58     uri += '/';
59     }
60    
61     try
62     {
63     check(::smbc_init(authenticate, 2));
64    
65     int dir(check(::smbc_opendir(uri.c_str())));
66     ::smbc_dirent* ent;
67    
68     while ((ent = ::smbc_readdir(dir)) != NULL)
69     {
70     std::cout << "ent.smbc_type = ";
71    
72     switch (ent->smbc_type)
73     {
74     case SMBC_WORKGROUP:
75     std::cout << "workgroup";
76     break;
77     case SMBC_SERVER:
78     std::cout << "server";
79     break;
80     case SMBC_FILE_SHARE:
81     std::cout << "file share";
82     break;
83     case SMBC_PRINTER_SHARE:
84     std::cout << "printer share";
85     break;
86     case SMBC_COMMS_SHARE:
87     std::cout << "comms share";
88     break;
89     case SMBC_IPC_SHARE:
90     std::cout << "ipc share";
91     break;
92     case SMBC_DIR:
93     std::cout << "dir";
94     break;
95     case SMBC_FILE:
96     std::cout << "file";
97     break;
98     case SMBC_LINK:
99     std::cout << "link";
100     }
101    
102     std::cout << std::endl << "ent.comment = " << ent->comment << std::endl << "ent.name = " << ent->name << std::endl;
103     }
104    
105     check(::smbc_closedir(dir));
106     }
107     catch (Exception exception)
108     {
109     std::cerr << exception << std::endl;
110     }
111    
112     return 0;
113     }

Properties

Name Value
svn:keywords Id