ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/Spectre/Maker.cpp
Revision: 166
Committed: 2003-06-14T02:20:39-07:00 (22 years ago) by douglas
File size: 1959 byte(s)
Log Message:
Changed password piping.

File Contents

# User Rev Content
1 douglas 161 // Spectre Samba Mounter
2     //
3     // Douglas Thrift
4     //
5     // Maker.cpp
6 douglas 148
7 douglas 161 #include "Maker.h"
8    
9     void Maker::make()
10     {
11 douglas 165 samba();
12    
13     struct stat dir;
14    
15     if (stat(config.root.c_str(), &dir) != 0)
16     {
17     if (mkdir(config.root.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH
18     | S_IXOTH) != 0)
19     {
20     string prefix = program + ": " + config.root;
21     perror(prefix.c_str());
22     }
23     }
24    
25     string path = config.root + "/" + host;
26    
27     if (stat(path.c_str(), &dir) != 0)
28     {
29     if (mkdir(path.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH
30     | S_IXOTH) != 0)
31     {
32     string prefix = program + ": " + path;
33     perror(prefix.c_str());
34     }
35     }
36    
37     for (map<string, Folder>::iterator itor = folders.begin(); itor
38     != folders.end(); itor++)
39     {
40     make(itor->first, itor->second.local);
41     }
42 douglas 161 }
43 douglas 165
44     void Maker::samba()
45     {
46 douglas 166 char credentials[17];
47    
48     sprintf(credentials, "%s", "/tmp/spectre.XXXX");
49     mkstemp(credentials);
50    
51     ofstream fout(credentials);
52    
53     fout << "username = " << regular.remote << "\n"
54     << "password = " << password(regular.remote) << "\n";
55    
56     fout.close();
57    
58 douglas 165 vector<string> args;
59    
60 douglas 166 args.push_back("spectre");
61 douglas 165 args.push_back("-N");
62     args.push_back("-L");
63     args.push_back(host);
64 douglas 166 args.push_back("-A");
65     args.push_back(credentials);
66 douglas 165
67     ipstream smbclient(config.smbclient, args);
68    
69     //
70 douglas 166
71     unlink(credentials);
72 douglas 165 }
73    
74     void Maker::make(const string& folder, const string& user)
75     {
76     struct stat dir;
77     string path = config.root + "/" + host + "/" + folder;
78    
79     if (stat(path.c_str(), &dir) != 0)
80     {
81     if (mkdir(path.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH
82     | S_IXOTH) != 0)
83     {
84     string prefix = program + ": " + path;
85     perror(prefix.c_str());
86     }
87     }
88    
89     struct passwd* item = getpwnam(user.c_str());
90    
91     if (item == NULL)
92     {
93     cerr << program << ": " << user << ": Unknown user\n";
94     return;
95     }
96    
97     if (dir.st_uid == item->pw_uid && dir.st_gid == item->pw_gid) return;
98    
99     if (chown(path.c_str(), item->pw_uid, item->pw_gid) != 0)
100     {
101     string prefix = program + ": " + path;
102     perror(prefix.c_str());
103     }
104     }