|
@@ -132,138 +132,6 @@ size_t smb_session_recv_msg(smb_session_t *s, smb_message_t *msg)
|
|
|
}
|
|
|
|
|
|
|
|
|
-void smb_session_share_add(smb_session_t *s, smb_share_t *share)
|
|
|
-{
|
|
|
- smb_share_t *iter;
|
|
|
-
|
|
|
- assert(s != NULL && share != NULL);
|
|
|
-
|
|
|
- if (s->shares == NULL)
|
|
|
- {
|
|
|
- s->shares = share;
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- iter = s->shares;
|
|
|
- while(iter->next != NULL)
|
|
|
- iter = iter->next;
|
|
|
- iter->next = share;
|
|
|
-}
|
|
|
-
|
|
|
-smb_share_t *smb_session_share_get(smb_session_t *s, smb_tid tid)
|
|
|
-{
|
|
|
- smb_share_t *iter;
|
|
|
-
|
|
|
- assert(s != NULL && tid);
|
|
|
-
|
|
|
- iter = s->shares;
|
|
|
- while(iter != NULL && iter->tid != tid)
|
|
|
- iter = iter->next;
|
|
|
-
|
|
|
- return (iter);
|
|
|
-}
|
|
|
-
|
|
|
-smb_share_t *smb_session_share_remove(smb_session_t *s, smb_tid tid)
|
|
|
-{
|
|
|
- smb_share_t *iter, *keep;
|
|
|
-
|
|
|
- assert(s != NULL && tid);
|
|
|
- iter = s->shares;
|
|
|
-
|
|
|
- if (iter == NULL)
|
|
|
- return (NULL);
|
|
|
- if (iter->tid == tid)
|
|
|
- {
|
|
|
- s->shares = s->shares->next;
|
|
|
- return (iter);
|
|
|
- }
|
|
|
-
|
|
|
- while(iter->next != NULL && iter->next->tid != tid)
|
|
|
- iter = iter->next;
|
|
|
-
|
|
|
- if (iter->next != NULL) // We found it
|
|
|
- {
|
|
|
- keep = iter->next;
|
|
|
- iter->next = iter->next->next;
|
|
|
- return (keep);
|
|
|
- }
|
|
|
- return (NULL);
|
|
|
-}
|
|
|
-
|
|
|
-int smb_session_file_add(smb_session_t *s, smb_tid tid, smb_file_t *f)
|
|
|
-{
|
|
|
- smb_share_t *share;
|
|
|
- smb_file_t *iter;
|
|
|
-
|
|
|
- assert(s != NULL && tid && f != NULL);
|
|
|
-
|
|
|
- if ((share = smb_session_share_get(s, tid)) == NULL)
|
|
|
- return (0);
|
|
|
-
|
|
|
- if (share->files == NULL)
|
|
|
- share->files = f;
|
|
|
- else
|
|
|
- {
|
|
|
- iter = share->files;
|
|
|
- while (iter->next != NULL)
|
|
|
- iter = iter->next;
|
|
|
- iter->next = f;
|
|
|
- }
|
|
|
-
|
|
|
- return (1);
|
|
|
-}
|
|
|
-
|
|
|
-smb_file_t *smb_session_file_get(smb_session_t *s, smb_fd fd)
|
|
|
-{
|
|
|
- smb_share_t *share;
|
|
|
- smb_file_t *iter;
|
|
|
-
|
|
|
- assert(s != NULL && fd);
|
|
|
-
|
|
|
- if ((share = smb_session_share_get(s, SMB_FD_TID(fd))) == NULL)
|
|
|
- return (NULL);
|
|
|
-
|
|
|
- iter = share->files;
|
|
|
- while(iter != NULL && iter->fid != SMB_FD_FID(fd))
|
|
|
- iter = iter->next;
|
|
|
-
|
|
|
- return (iter);
|
|
|
-}
|
|
|
-
|
|
|
-smb_file_t *smb_session_file_remove(smb_session_t *s, smb_fd fd)
|
|
|
-{
|
|
|
- smb_share_t *share;
|
|
|
- smb_file_t *iter, *keep;
|
|
|
-
|
|
|
- assert(s != NULL && fd);
|
|
|
-
|
|
|
- if ((share = smb_session_share_get(s, SMB_FD_TID(fd))) == NULL)
|
|
|
- return (NULL);
|
|
|
-
|
|
|
- iter = share->files;
|
|
|
-
|
|
|
- if (iter == NULL)
|
|
|
- return (NULL);
|
|
|
- if (iter->fid == SMB_FD_FID(fd))
|
|
|
- {
|
|
|
- share->files = iter->next;
|
|
|
- return (iter);
|
|
|
- }
|
|
|
-
|
|
|
- while(iter->next != NULL && iter->next->fid != SMB_FD_TID(fd))
|
|
|
- iter = iter->next;
|
|
|
- if (iter->next != NULL)
|
|
|
- {
|
|
|
- keep = iter->next;
|
|
|
- iter->next = iter->next->next;
|
|
|
- return (keep);
|
|
|
- }
|
|
|
- else
|
|
|
- return (NULL);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
int smb_negotiate(smb_session_t *s)
|
|
|
{
|
|
|
const char *dialects[] = SMB_DIALECTS;
|
|
@@ -314,8 +182,8 @@ int smb_negotiate(smb_session_t *s)
|
|
|
return (0);
|
|
|
}
|
|
|
|
|
|
-int smb_authenticate(smb_session_t *s, const char *domain,
|
|
|
- const char *user, const char *password)
|
|
|
+int smb_session_login(smb_session_t *s, const char *domain,
|
|
|
+ const char *user, const char *password)
|
|
|
{
|
|
|
smb_message_t answer;
|
|
|
smb_message_t *msg = NULL;
|
|
@@ -404,3 +272,29 @@ int smb_authenticate(smb_session_t *s, const char *domain,
|
|
|
|
|
|
return (1);
|
|
|
}
|
|
|
+
|
|
|
+int smb_session_is_guest(smb_session_t *s)
|
|
|
+{
|
|
|
+ // Invalid session object
|
|
|
+ if (s == NULL)
|
|
|
+ return (-1);
|
|
|
+
|
|
|
+ // We're not logged in yet.
|
|
|
+ if (smb_session_state(s) != SMB_STATE_SESSION_OK)
|
|
|
+ return (-1);
|
|
|
+
|
|
|
+ // We're logged in as guest
|
|
|
+ if (s->guest)
|
|
|
+ return (1);
|
|
|
+
|
|
|
+ // We're logged in as regular user
|
|
|
+ return (0);
|
|
|
+}
|
|
|
+
|
|
|
+const char *smb_session_server_name(smb_session_t *s)
|
|
|
+{
|
|
|
+ if (s == NULL)
|
|
|
+ return (NULL);
|
|
|
+ else
|
|
|
+ return (s->srv.name);
|
|
|
+}
|