~ubuntu-branches/ubuntu/utopic/samba/utopic

« back to all changes in this revision

Viewing changes to source3/winbindd/wb_next_pwent.c

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-02-21 09:06:34 UTC
  • mfrom: (0.39.23 sid)
  • Revision ID: package-import@ubuntu.com-20120221090634-svd7q7m33pfz0847
Tags: 2:3.6.3-1ubuntu1
* Merge from Debian testing.  Remaining changes:
  + debian/patches/VERSION.patch:
    - set SAMBA_VERSION_SUFFIX to Ubuntu.
  + debian/patches/error-trans.fix-276472:
    - Add the translation of Unix Error code -ENOTSUP to NT Error Code
    - NT_STATUS_NOT_SUPPORTED to prevent the Permission denied error.
  + debian/smb.conf:
    - add "(Samba, Ubuntu)" to server string.
    - comment out the default [homes] share, and add a comment about
      "valid users = %S" to show users how to restrict access to
      \\server\username to only username.
    - Set 'usershare allow guests', so that usershare admins are 
      allowed to create public shares in addition to authenticated
      ones.
    - add map to guest = Bad user, maps bad username to guest access.
  + debian/samba-common.config:
    - Do not change priority to high if dhclient3 is installed.
    - Use priority medium instead of high for the workgroup question.
  + debian/control:
    - Don't build against or suggest ctdb.
    - Add dependency on samba-common-bin to samba.
  + Add ufw integration:
    - Created debian/samba.ufw.profile
    - debian/rules, debian/samba.dirs, debian/samba.files: install
      profile
    - debian/control: have samba suggest ufw
  + Add apport hook:
    - Created debian/source_samba.py.
    - debian/rules, debian/samba.dirs, debian/samba-common-bin.files: install
  + Switch to upstart:
    - Add debian/samba.{nmbd,smbd}.upstart.
  + debian/samba.logrotate, debian/samba-common.dhcp, debian/samba.if-up:
    - Make them upstart compatible
  + debian/samba.postinst: 
    - Avoid scary pdbedit warnings on first import.
  + debian/samba-common.postinst: Add more informative error message for
    the case where smb.conf was manually deleted
  + debian/patches/fix-debuglevel-name-conflict.patch: don't use 'debug_level'
    as a global variable name in an NSS module.
* Dropped:
  - debian/patches/fix-samba-printer-browsing.patch: No longer needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
static void wb_next_pwent_fetch_done(struct tevent_req *subreq);
32
32
static void wb_next_pwent_fill_done(struct tevent_req *subreq);
33
33
 
 
34
static struct winbindd_domain *wb_next_find_domain(struct winbindd_domain *domain)
 
35
{
 
36
        if (domain == NULL) {
 
37
                domain = domain_list();
 
38
        } else {
 
39
                domain = domain->next;
 
40
        }
 
41
 
 
42
        if ((domain != NULL)
 
43
            && sid_check_is_domain(&domain->sid)) {
 
44
                domain = domain->next;
 
45
        }
 
46
 
 
47
        if (domain == NULL) {
 
48
                return NULL;
 
49
        }
 
50
 
 
51
        return domain;
 
52
}
 
53
 
34
54
struct tevent_req *wb_next_pwent_send(TALLOC_CTX *mem_ctx,
35
55
                                      struct tevent_context *ev,
36
56
                                      struct getpwent_state *gstate,
50
70
        if (state->gstate->next_user >= state->gstate->num_users) {
51
71
                TALLOC_FREE(state->gstate->users);
52
72
 
53
 
                if (state->gstate->domain == NULL) {
54
 
                        state->gstate->domain = domain_list();
55
 
                } else {
56
 
                        state->gstate->domain = state->gstate->domain->next;
57
 
                }
58
 
 
59
 
                if ((state->gstate->domain != NULL)
60
 
                    && sid_check_is_domain(&state->gstate->domain->sid)) {
61
 
                        state->gstate->domain = state->gstate->domain->next;
62
 
                }
63
 
 
 
73
                state->gstate->domain = wb_next_find_domain(state->gstate->domain);
64
74
                if (state->gstate->domain == NULL) {
65
75
                        tevent_req_nterror(req, NT_STATUS_NO_MORE_ENTRIES);
66
76
                        return tevent_req_post(req, ev);
148
158
 
149
159
        status = wb_fill_pwent_recv(subreq);
150
160
        TALLOC_FREE(subreq);
151
 
        if (tevent_req_nterror(req, status)) {
 
161
        /*
 
162
         * When you try to enumerate users with 'getent passwd' and the user
 
163
         * doesn't have a uid set we should just move on.
 
164
         */
 
165
        if (NT_STATUS_EQUAL(status, NT_STATUS_NONE_MAPPED)) {
 
166
                state->gstate->next_user += 1;
 
167
 
 
168
                if (state->gstate->next_user >= state->gstate->num_users) {
 
169
                        TALLOC_FREE(state->gstate->users);
 
170
 
 
171
                        state->gstate->domain = wb_next_find_domain(state->gstate->domain);
 
172
                        if (state->gstate->domain == NULL) {
 
173
                                tevent_req_nterror(req, NT_STATUS_NO_MORE_ENTRIES);
 
174
                                return;
 
175
                        }
 
176
 
 
177
                        subreq = wb_query_user_list_send(state, state->ev,
 
178
                                        state->gstate->domain);
 
179
                        if (tevent_req_nomem(subreq, req)) {
 
180
                                return;
 
181
                        }
 
182
                        tevent_req_set_callback(subreq, wb_next_pwent_fetch_done, req);
 
183
                        return;
 
184
                }
 
185
 
 
186
                subreq = wb_fill_pwent_send(state,
 
187
                                            state->ev,
 
188
                                            &state->gstate->users[state->gstate->next_user],
 
189
                                            state->pw);
 
190
                if (tevent_req_nomem(subreq, req)) {
 
191
                        return;
 
192
                }
 
193
                tevent_req_set_callback(subreq, wb_next_pwent_fill_done, req);
 
194
 
 
195
                return;
 
196
        } else if (tevent_req_nterror(req, status)) {
152
197
                return;
153
198
        }
154
199
        state->gstate->next_user += 1;