Browse code
pam impl returns correct user and token
Greg Wiley authored on 20/04/2017 21:46:12
Showing 3 changed files
Showing 3 changed files
... | ... |
@@ -18,21 +18,40 @@ namespace |
18 | 18 |
public: |
19 | 19 |
impl(pam &pam) : pam_(pam) {} |
20 | 20 |
conversation_result initiate (const pam_request &request) { |
21 |
- pam_conv *out; |
|
22 |
- int result = pam_.get:_conv(request.handle(), |
|
23 |
- /*int get_conv (pam_handle *handle, const pam_conv **out) |
|
24 |
- { |
|
25 |
- return delegate_->get_conv (handle, out); |
|
26 |
- } |
|
27 |
- */ |
|
21 |
+ const pam_conv *conv; |
|
22 |
+ int get_conv_result = pam_.get_conv (request.handle(), &conv); |
|
23 |
+ pam_message msg; |
|
24 |
+ msg.msg = const_cast<char *>("Dual control token: "); |
|
25 |
+ msg.msg_style = PAM_PROMPT_ECHO_OFF; |
|
26 |
+ std::vector<const pam_message *> messages; |
|
27 |
+ messages.push_back(&msg); |
|
28 |
+ std::vector<pam_response *> responses(1); |
|
29 |
+ int conv_result = conv->conv(1, messages.data(), responses.data(), conv->appdata_ptr); |
|
30 |
+ std::string answer(responses[0]->resp); |
|
31 |
+ |
|
32 |
+ std::string user; |
|
33 |
+ std::string token; |
|
34 |
+ std::string::iterator delim = std::find (answer.begin(), answer.end(), ':'); |
|
35 |
+ if (delim != answer.end()) { |
|
36 |
+ user = std::string(answer.begin(), delim); |
|
37 |
+ token = std::string(delim + 1, answer.end()); |
|
38 |
+ } |
|
39 |
+ |
|
40 |
+ return {user, token}; |
|
28 | 41 |
} |
29 | 42 |
}; |
30 | 43 |
} |
31 | 44 |
|
32 | 45 |
conversation create_conversation(pam &pam) { |
33 |
- return conversation(std::shared_ptr<conversation_ifc>(new impl)); |
|
46 |
+ return conversation(std::shared_ptr<conversation_ifc>(new impl(pam))); |
|
34 | 47 |
} |
35 | 48 |
|
49 |
+/* |
|
50 |
+int (*conv)(int num_msg, const struct pam_message **msg, |
|
51 |
+ struct pam_response **resp, void *appdata_ptr) |
|
52 |
+ */ |
|
53 |
+ |
|
54 |
+ |
|
36 | 55 |
/* |
37 | 56 |
pam_token_conversation::pam_token_conversation (pam_handle_t *pamh, |
38 | 57 |
const pam_p pam) |
... | ... |
@@ -17,12 +17,12 @@ public: |
17 | 17 |
flags_ (flags), |
18 | 18 |
argc_ (argc), |
19 | 19 |
argv_ (argv) {} |
20 |
- std::vector<std::string> arguments(); |
|
21 |
- int flags() |
|
20 |
+ std::vector<std::string> arguments() const; |
|
21 |
+ int flags() const |
|
22 | 22 |
{ |
23 | 23 |
return flags_; |
24 | 24 |
} |
25 |
- pam_handle *handle() |
|
25 |
+ pam_handle *handle() const |
|
26 | 26 |
{ |
27 | 27 |
return handle_; |
28 | 28 |
} |