-
Notifications
You must be signed in to change notification settings - Fork 0
/
objget.cc
57 lines (51 loc) · 1.49 KB
/
objget.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "utils.h"
#include "objectstore.h"
#define USAGE_STRING "Usage: objget [-k passphrase] objname\n" \
" objname the name of the object being retrieved.\n" \
" [-k passphrase] optional -k and passphrase with which to encrypt data.\n"
int main(int argc, char* argv[])
{
using namespace std;
using namespace object_store;
using namespace utils;
utils::setup_setuid();
string ownername, username, objname, key;
vector<const string*>* groups = new vector<const string*>(); //aclobject takes care of de-allocating
unsigned char hash[16];
unsigned int md5_len;
bool use_key;
if(! get_params(argc, argv, USAGE_STRING, username, *groups, ownername, objname, key) )
return 1;
use_key = (key != "");
if(use_key)
{
md5(&key, hash, &md5_len);
if(md5_len != 16)
{
cerr << "can't hash passphrase, try another?" << endl << USAGE_STRING;
return 1;
}
}
try{
auto_ptr<ACLObject> obj(new ACLObject(username, groups, ownername, objname));
if(obj->exists())
{
if(use_key)
{
if(read_encrypted((*obj), cout, hash) != 0)
cerr << "can't decrypt file. passphrase is probably wrong" << endl << USAGE_STRING;
}
else
cout << *obj;
}
else
{
cerr << USAGE_STRING << endl << "object doesnt exist" << endl;
return 2;
}
}
catch(exception& e){
cerr << USAGE_STRING << endl << e.what() << endl;
return 3;
}
}