Projet

Général

Profil

Paste
Télécharger (29,7 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ldap / ldap_servers / ldap_servers.install @ bc175c27

1
<?php
2

    
3
/**
4
 * @file
5
 * Install, update and uninstall functions for the LDAP API module.
6
 */
7

    
8
/**
9
 * Implements hook_install().
10
 */
11
function ldap_servers_install() {
12

    
13
}
14

    
15
/**
16
 * Implements hook_uninstall().
17
 */
18
function ldap_servers_uninstall() {
19
  variable_del('ldap_servers_encryption');
20
  variable_del('ldap_servers_require_ssl_for_credentials');
21
  variable_del('ldap_servers_encrypt_key');
22

    
23
}
24

    
25
/**
26
 * Implements hook_requirements().
27
 */
28
function ldap_servers_requirements($phase) {
29
  $requirements = array();
30
  $t = get_t();
31

    
32
  if ($phase == 'install') {
33
    $requirements['ldap_extension_loaded']['title'] = t('LDAP Extension Loaded');
34
    if (extension_loaded('ldap')) {
35
      $requirements['ldap_extension_loaded']['severity'] = REQUIREMENT_OK;
36
    }
37
    else {
38
      $requirements['ldap_extension_loaded']['severity'] = REQUIREMENT_ERROR;
39
      $requirements['ldap_extension_loaded']['description'] = t('No LDAP PHP Extension is loaded for PHP, so LDAP will not work properly.');
40
    }
41
  }
42

    
43
  if ($phase == 'runtime' && !extension_loaded('ldap')) {
44
    $requirements['ldap_extension_loaded']['title'] = t('LDAP Extension Loaded');
45
    $requirements['ldap_extension_loaded']['severity'] = REQUIREMENT_ERROR;
46
    $requirements['ldap_extension_loaded']['description'] = t('No LDAP PHP Extension is loaded for PHP, so LDAP will not work properly.');
47
  }
48

    
49
  if ($phase != "install" && db_table_exists('ldapauth')) {
50
    $requirements['ldap_servers']['title'] = t('LDAP Integration LDAP Auth to LDAP Servers Upgrade Concern');
51
    $requirements['ldap_servers']['severity'] = REQUIREMENT_WARNING;
52
    $requirements['ldap_servers']['value'] = NULL;
53
    $requirements['ldap_servers']['description'] = t('Upgrade from Drupal 6 LDAP Auth to Drupal 7
54
      LDAP Servers is not automatic.  LDAP Servers will need to be configured by hand.
55
      See http://drupal.org/node/1023016. This message will go away when the ldapauth database table is removed.');
56
  }
57
  // check that ldapauth not installed.
58

    
59
  // Check enabled LDAP servers are configured and Drupal can connect to them.
60
  if ($phase == 'runtime') {
61
    $requirements['ldap_servers_enabled'] = array(
62
      'title' => $t('LDAP Server status'),
63
      'value' => $t('Disabled'),
64
      'severity' => REQUIREMENT_WARNING,
65
    );
66

    
67
    $servers = ldap_servers_get_servers(NULL, 'enabled');
68
    if (!empty($servers)) {
69
      unset($requirements['ldap_servers_enabled']);
70

    
71
      foreach ($servers as $server) {
72
        $server_req_key = 'ldap_servers_sid_' . $server->sid;
73
        $server_tokens = array(
74
          '@host' => $server->address,
75
          '@sid' => $server->sid,
76
        );
77
        $requirements[$server_req_key] = array(
78
          'title' => $t('LDAP Server status: @sid (@host)', $server_tokens),
79
          'value' => $t('Connection: Failed, check logs for details.', $server_tokens),
80
          'severity' => REQUIREMENT_ERROR,
81
        );
82

    
83
        try {
84
          $connect_result = $server->connect();
85
          if ($connect_result == LDAP_SUCCESS) {
86
            if ($server->bind_method == LDAP_SERVERS_BIND_METHOD_USER) {
87
              // Check bind anonymously if set to bind via user credentials.
88
              // The user has already logged in and so their is no dn or password
89
              // to check since LDAP doesn't store passwords.
90
              $bind_result = $server->bind(NULL, NULL, TRUE);
91
            } else {
92
              $bind_result = $server->bind();
93
            }
94
            if ($bind_result == LDAP_SUCCESS) {
95
              $requirements[$server_req_key]['value'] = $t('Connection: Success, Bind: Success', $server_tokens);
96
              $requirements[$server_req_key]['severity'] = REQUIREMENT_OK;
97
            }
98
          }
99
          $server->disconnect();
100
        }
101
        catch (Exception $e) {
102
        }
103
      }
104
    }
105
  }
106

    
107
  return $requirements;
108
}
109

    
110
/**
111
 * Implements hook_schema().
112
 */
113
function ldap_servers_schema() {
114
  module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
115
  module_load_include('module', 'ldap_servers', 'ldap_servers'); // to get the LDAP_SERVERS_ENC_TYPE_CLEARTEXT constants issue#1209576
116
  module_load_include('php', 'ldap_servers', 'LdapServerAdmin.class');
117

    
118
  $schema['ldap_servers'] = array(
119
    'export' => array(
120
      'key' => 'sid',
121
      'key name' => 'Server ID',
122
      'primary key' => 'numeric_sid',
123
      'identifier' => 'ldap_servers_conf',
124
      'api' => array(
125
        'owner' => 'ldap_servers',
126
        'api' => 'ldap_servers',
127
        'minimum_version' => 1,
128
        'current_version' => 1,
129
        ),
130
      ),
131
    'primary key' => array('numeric_sid'),
132
    'unique keys' => array('name' => array('name')),
133
  );
134

    
135
  $fields = LdapServerAdmin::fields();
136
  foreach ($fields as $name => $props) {
137
    if (isset($props['schema'])) {
138
      $schema['ldap_servers']['fields'][$name] = $props['schema'];
139
    }
140
  }
141

    
142
  return $schema;
143

    
144
}
145

    
146
/**
147
 * rename ldap_servers type field to ldap_type
148
 */
149

    
150
function ldap_servers_update_7100() {
151
  if (!ldap_servers_db_field_exists('ldap_servers', 'ldap_type') && ldap_servers_db_field_exists('ldap_servers', 'type')) {
152
    db_change_field('ldap_servers', 'type', 'ldap_type', array(
153
      'type' => 'varchar',
154
      'length' => 20,
155
      'not null' => FALSE
156
    ));
157
  }
158

    
159
  return t('ldap_servers table field "type" renamed to "ldap_type"');
160

    
161
}
162

    
163
/**
164
 * ldap_server table field changes
165
 */
166

    
167
function ldap_servers_update_7101() {
168

    
169
  db_add_field(
170
    'ldap_servers',
171
    'allow_conflicting_drupal_accts',
172
    array(
173
      'type' => 'int',
174
      'size' => 'tiny',
175
      'not null' => FALSE,
176
      'default' => 0,
177
    )
178
  );
179

    
180
  db_add_field(
181
    'ldap_servers',
182
    'unique_persistent_attr',
183
    array(
184
      'type' => 'varchar',
185
      'length' => '64',
186
      'not null' => FALSE,
187
    )
188
  );
189

    
190
  db_add_field(
191
    'ldap_servers',
192
    'mail_template',
193
    array(
194
      'type' => 'varchar',
195
      'length' => '255',
196
      'not null' => FALSE,
197
    )
198
  );
199

    
200
  db_change_field('ldap_servers', 'ldap_to_drupal_user', 'ldap_to_drupal_user', array(
201
    'type' => 'varchar',
202
    'length' => 1024,
203
    'not null' => FALSE
204
  ));
205

    
206
  db_change_field('ldap_servers', 'binddn', 'binddn', array(
207
    'type' => 'varchar',
208
    'length' => 511,
209
  ));
210

    
211

    
212
  return t('Updated LDAP Server to include "allow_conflicting_drupal_accts" and "unique_persistent_attr" fields.');
213
}
214

    
215

    
216
/**
217
 * add bind_method field to ldap_servers table
218
 */
219
function ldap_servers_update_7102() {
220

    
221
  if (!ldap_servers_db_field_exists('ldap_servers', 'bind_method')) {
222
    db_add_field('ldap_servers', 'bind_method', array(
223
      'type' => 'int',
224
      'size' => 'tiny',
225
      'not null' => TRUE,
226
      'default' => 0,
227
    ));
228
    $msg = t('"bind_method" field added to ldap_servers table');
229
  }
230

    
231
  return ($msg) ? $msg : t('No database changes made.');
232
}
233

    
234
/**
235
 * add group_object_category field to ldap_servers table
236
 */
237
function ldap_servers_update_7103() {
238

    
239
  if (!ldap_servers_db_field_exists('ldap_servers', 'group_object_category')) {
240
    db_add_field('ldap_servers', 'group_object_category', array(
241
      'type' => 'varchar',
242
      'length' => 64,
243
      'not null' => FALSE,
244
    ));
245
    $msg = t('"group_object_category" field added to ldap_servers table');
246
  }
247

    
248
  return ($msg) ? $msg : t('No database changes made.');
249
}
250

    
251

    
252
/**
253
 * add pagination fields to ldap_servers table
254
 */
255
function ldap_servers_update_7104() {
256

    
257
  if (!ldap_servers_db_field_exists('ldap_servers', 'search_pagination')) {
258
    db_add_field('ldap_servers', 'search_pagination', array(
259
      'type' => 'int',
260
      'size' => 'tiny',
261
      'not null' => FALSE,
262
      'default' => 0,
263
    ));
264
    $msg = t('"search_pagination" field added to ldap_servers table');
265
  }
266

    
267
  if (!ldap_servers_db_field_exists('ldap_servers', 'search_page_size')) {
268
    db_add_field('ldap_servers', 'search_page_size', array(
269
      'type' => 'int',
270
      'size' => 'medium',
271
      'not null' => FALSE,
272
      'default' => 1000,
273
    ));
274
    $msg .= '<br/>' . t('"search_page_size" field added to ldap_servers table');
275
  }
276

    
277
  if (!ldap_servers_db_field_exists('ldap_servers', 'unique_persistent_attr_binary')) {
278
    db_add_field('ldap_servers', 'unique_persistent_attr_binary', array(
279
      'type' => 'int',
280
      'size' => 'tiny',
281
      'not null' => FALSE,
282
      'default' => 0,
283
    ));
284
    $msg = t('"unique_persistent_attr_binary" field added to ldap_servers table');
285
  }
286

    
287

    
288

    
289
  return ($msg) ? $msg : t('No database changes made.');
290
}
291

    
292
/**
293
 * enable ldap_user module
294
 */
295
function ldap_servers_update_7105() {
296

    
297
  if (!module_exists('ldap_user')) {
298
    module_enable(array('ldap_user'));
299
    $msg = t('LDAP User module enabled.  Some authentication and authorization functionality shifted to LDAP User module.');
300
  }
301

    
302
  return ($msg) ? $msg : t('LDAP User module was already enabled.  No action taken.');
303
}
304

    
305

    
306

    
307
/**
308
 * add account_name_attr field to ldap_servers table
309
 */
310
function ldap_servers_update_7106() {
311
  if (!ldap_servers_db_field_exists('ldap_servers', 'account_name_attr')) {
312
    db_add_field('ldap_servers', 'account_name_attr', array(
313
    'description' => 'The attribute to be used as the account name if not the user_attr',
314
    'type' => 'varchar',
315
    'length' => 255,
316
    'not null' => FALSE,
317
    'default' => '',
318
  ));
319
    $msg = t('"account_name_attr" field added to ldap_servers table');
320
  }
321

    
322
  return ($msg) ? $msg : t('No database changes made.');
323
}
324

    
325
/**
326
 *  remove allow_conflicting_drupal_accts from ldap_servers table
327
 */
328
function ldap_servers_update_7107() {
329
  if (ldap_servers_db_field_exists('ldap_servers', 'allow_conflicting_drupal_accts')) {
330
    db_drop_field('ldap_servers', 'allow_conflicting_drupal_accts');
331
    $msg = t('"allow_conflicting_drupal_accts" field removed from ldap_servers table');
332
  }
333
  return ($msg) ? $msg : t('No database changes made.');
334
}
335

    
336

    
337

    
338
function ldap_servers_db_field_exists($table, $field_name) {
339
  if (!db_field_exists($table, $field_name) && !db_field_exists($table, drupal_strtolower($field_name)) ) {
340
    return false;
341
  }
342
  else {
343
    return true;
344
  }
345
}
346
/**
347
 * add group related fields to ldap_servers table
348
 */
349
function ldap_servers_update_7108() {
350

    
351
  foreach (array('groupFunctionalityUnused', 'groupNested', 'groupSearchAll', 'groupUserMembershipsAttrExists', 'groupDeriveFromDn', 'groupUserMembershipsAttrExists') as $tinyint_field_name) {
352
    if (!ldap_servers_db_field_exists('ldap_servers', $tinyint_field_name))  {
353
      db_add_field('ldap_servers', $tinyint_field_name, array(
354
        'type' => 'int',
355
        'size' => 'tiny',
356
        'not null' => FALSE,
357
        'default' => 0,
358
      ));
359
      $msg = t('"!name" field added to ldap_servers table', array('!name' => $tinyint_field_name));
360
    }
361
  }
362
  foreach (array('groupUserMembershipsAttr', 'groupMembershipsAttr', 'groupTestGroupDn', 'groupUserMembershipsAttr', 'groupMembershipsAttrMatchingUserAttr') as $varchar255field_name) {
363
    if (!ldap_servers_db_field_exists('ldap_servers', $varchar255field_name) && !ldap_servers_db_field_exists('ldap_servers', drupal_strtolower($varchar255field_name))) {
364
      db_add_field('ldap_servers', $varchar255field_name, array(
365
        'type' => 'varchar',
366
        'length' => '255',
367
        'not null' => FALSE,
368
      ));
369
      $msg = t('"!name" field added to ldap_servers table', array('!name' => $varchar255field_name));
370
    }
371
  }
372
}
373

    
374

    
375
/**
376
 * adjust group related fields to ldap_servers table
377
 */
378
function ldap_servers_update_7109() {
379

    
380
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupNested')) {
381
    db_add_field('ldap_servers', 'groupNested', array(
382
      'type' => 'int',
383
      'size' => 'tiny',
384
      'not null' => FALSE,
385
      'default' => 0,
386
    ));
387
    $msg = t('"groupNested" field added to ldap_servers table');
388
  }
389

    
390
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUseFirstAttr')) {
391
    db_add_field('ldap_servers', 'groupUseFirstAttr', array(
392
      'type' => 'int',
393
      'size' => 'tiny',
394
      'not null' => FALSE,
395
      'default' => 0,
396
    ));
397
    $msg .= '<br/>' . t('"groupUseFirstAttr" field added to ldap_servers table');
398
  }
399

    
400
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupSearchAll')) {
401
    db_add_field('ldap_servers', 'groupSearchAll', array(
402
      'type' => 'int',
403
      'size' => 'tiny',
404
      'not null' => FALSE,
405
      'default' => 0,
406
    ));
407
    $msg = t('"groupSearchAll" field added to ldap_servers table');
408
  }
409

    
410
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttrExists')) {
411
    db_add_field('ldap_servers', 'groupUserMembershipsAttrExists', array(
412
      'type' => 'int',
413
      'size' => 'tiny',
414
      'not null' => FALSE,
415
      'default' => 0,
416
    ));
417
    $msg = t('"groupUserMembershipsAttrExists" field added to ldap_servers table');
418
  }
419

    
420
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttr')) {
421
    db_add_field('ldap_servers', 'groupUserMembershipsAttr', array(
422
      'type' => 'varchar',
423
      'length' => '255',
424
      'not null' => FALSE,
425
    ));
426
    $msg = t('"groupUserMembershipsAttr" field added to ldap_servers table');
427
  }
428

    
429
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupMembershipsAttr')) {
430
    db_add_field('ldap_servers', 'groupMembershipsAttr', array(
431
      'type' => 'varchar',
432
      'length' => '255',
433
      'not null' => FALSE,
434
    ));
435
    $msg = t('"groupMembershipsAttr" field added to ldap_servers table');
436
  }
437

    
438
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupMembershipsAttrMatchingUserAttr')) {
439
    db_add_field('ldap_servers', 'groupMembershipsAttrMatchingUserAttr', array(
440
      'type' => 'varchar',
441
      'length' => '255',
442
      'not null' => FALSE,
443
    ));
444
    $msg = t('"groupMembershipsAttrMatchingUserAttr" field added to ldap_servers table');
445
  }
446

    
447
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttrExists')) {
448
    db_add_field('ldap_servers', 'groupUserMembershipsAttrExists', array(
449
      'type' => 'int',
450
      'size' => 'tiny',
451
      'not null' => FALSE,
452
      'default' => 0,
453
    ));
454
    $msg = t('"groupUserMembershipsAttrExists" field added to ldap_servers table');
455
  }
456

    
457
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttr')) {
458
    db_add_field('ldap_servers', 'groupUserMembershipsAttr', array(
459
      'type' => 'varchar',
460
      'length' => '255',
461
      'not null' => FALSE,
462
    ));
463
    $msg = t('"groupUserMembershipsAttr" field added to ldap_servers table');
464
  }
465

    
466
}
467

    
468
/**
469
 * adjust group related fields to ldap_servers table
470
 */
471
function ldap_servers_update_7110() {
472

    
473
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupFunctionalityUnused')) {
474
    db_add_field('ldap_servers', 'groupFunctionalityUnused', array(
475
      'type' => 'int',
476
      'size' => 'tiny',
477
      'not null' => FALSE,
478
      'default' => 0,
479
    ));
480
    $msg = t('"groupFunctionalityUnused" field added to ldap_servers table');
481
  }
482

    
483
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupTestGroupDn')) {
484
    db_add_field('ldap_servers', 'groupTestGroupDn', array(
485
      'type' => 'varchar',
486
      'length' => '255',
487
      'not null' => FALSE,
488
    ));
489
    $msg = t('"groupTestGroupDn" field added to ldap_servers table');
490
  }
491

    
492
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupTestGroupDnWriteable')) {
493
    db_add_field('ldap_servers', 'groupTestGroupDnWriteable', array(
494
      'type' => 'varchar',
495
      'length' => '255',
496
      'not null' => FALSE,
497
    ));
498
    $msg = t('"groupTestGroupDnWriteable" field added to ldap_servers table');
499
  }
500

    
501
}
502

    
503
/**
504
 * add field groupTestGroupDnWriteable to ldap_servers table
505
 */
506
function ldap_servers_update_7111() {
507

    
508
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupTestGroupDnWriteable')) {
509
    db_add_field('ldap_servers', 'groupTestGroupDnWriteable', array(
510
      'type' => 'varchar',
511
      'length' => '255',
512
      'not null' => FALSE,
513
    ));
514
    $msg = t('"groupTestGroupDnWriteable" field added to ldap_servers table');
515
  }
516

    
517
}
518

    
519
/**
520
 * add field testingDrupalUserDn to ldap_servers table
521
 */
522
function ldap_servers_update_7112() {
523

    
524
  if (!ldap_servers_db_field_exists('ldap_servers', 'testingDrupalUserDn')) {
525
    db_add_field('ldap_servers', 'testingDrupalUserDn', array(
526
      'type' => 'varchar',
527
      'length' => '255',
528
      'not null' => FALSE,
529
    ));
530
    $msg = t('"testingDrupalUserDn" field added to ldap_servers table');
531
  }
532

    
533
}
534

    
535

    
536
/**
537
 * upgrade as much as feasible for 7.1 to 7.2 branch
538
 */
539
function ldap_servers_update_7201() {
540

    
541
  $change_log = array();
542

    
543
  // 1. ldap_user is now required for ldap_authentication and ldap_authorization
544
  if (module_exists('ldap_authentication') || module_exists('ldap_authorization')) {
545
    module_enable(array('ldap_user'), TRUE);
546
    $change_log[] = t('LDAP User Module Enabled');
547
  }
548

    
549
  /**
550
   * ldap_servers and ldap_authorization tables in 7.x-1.x to 7.x-2.x update
551
   *
552
   * LDAP_SERVERS fields that don't change:
553
   *  sid, numeric_sid, name, status, ldap_type, address, port, tls, bind_method,
554
   *  binding_service_acct, binddn, bindpw, basedn, user_attr, account_name_attr,
555
   *  mail_attr, mail_template, unique_persistent_attr, user_dn_expression,
556
   *  testing_drupal_username, group_object_category
557
   *  search_pagination, search_page_size, ldap_to_drupal_user,
558
   *
559
   * LDAP_SERVERS fields not populated in update:
560
   *   unique_persistent_attr_binary
561
   *   testingDrupalUserDn
562
   *   groupTestGroupDn - new no value in it and not important
563
   *   groupTestGroupDnWriteable - new no value in it and not important
564
   *
565
   * LDAP_SERVERS fields set/adjusted in update:
566
   *   groupNested
567
   *   groupFunctionalityUnused = 1 if ldap authorization tables exist
568
   *   groupDeriveFromDn from option IIA of ldap authorization
569
   *   groupDeriveFromDnAttr from option IIA of ldap authorization
570
   *   groupUserMembershipsAttrExists = 1 if option IIB used in ldap authorization
571
   *   groupUserMembershipsAttr  get from ldap authorization  IIB
572
   *   groupMembershipsAttr from option IIC in ldap authorization derive from entry
573
   *   groupMembershipsAttrMatchingUserAttr from option IIC
574
   *
575
   *
576
   * LDAP_AUTHORIZATION fields that don't change:
577
   *   numeric_consumer_conf_id, sid, consumer_type, consumer_module
578
   *   status, only_ldap_authenticated, mappings, use_filter,
579
   *   synchronization_modes, synchronization_actions, synch_to_ldap,
580
   *   synch_on_logon, revoke_ldap_provisioned, create_consumers,
581
   *   regrant_ldap_provisioned
582
   *
583
   * LDAP_AUTHORIZATION fields populated in update:
584
   *   useFirstAttrAsGroupId = derive_from_attr_use_first_attr || derive_from_entry_use_first_attr
585
   *
586
   * LDAP_AUTHORIZATION fields to remove in update
587
   *    derive_from_dn, derive_from_dn_attr, derive_from_entry, derive_from_attr
588
   *    derive_from_attr_attr, derive_from_entry, derive_from_entry_attr,
589
   *    derive_from_entry_entries_attr, derive_from_entry_nested,
590
   *    derive_from_attr_use_first_attr, derive_from_entry_search_all
591
   *    derive_from_entry_use_first_attr
592
   *
593
   */
594

    
595

    
596
  // 2.  add any missing fields from schema
597
  ldap_servers_install_update_schema(ldap_servers_schema(), $change_log);
598
  if (module_exists('ldap_authorization')) {
599
    ldap_servers_install_update_schema(ldap_authorization_schema(), $change_log);
600
  }
601
  if (module_exists('ldap_query')) {
602
    ldap_servers_install_update_schema(ldap_query_schema(), $change_log);
603
  }
604

    
605
  // 3.  move configuration data that has changed location within ldap modules
606
  $field_changes = array();
607
  $ldap_server_records = array();
608
  $select = db_select('ldap_servers')
609
    ->fields('ldap_servers')
610
    ->execute();
611
  foreach ($select as $record) {
612
    $ldap_server_records[$record->sid] = $record;
613
  }
614

    
615
  if (db_table_exists('ldap_authorization')) {
616
    $ldap_authorization_record = NULL;
617
    $select = db_select('ldap_authorization', 'authz')
618
      ->fields('authz')
619
      ->execute();
620
    // pick best ldap authorization conf to use to configure ldap server
621
    $max_weight = -1;
622
    foreach ($select as $record) {
623
      $weight = (int)($record->status) + (int)($record->consumer_type == 'drupal_role');
624
      if ($weight > $max_weight) {
625
        $max_weight = $weight;
626
        $ldap_authorization_record = $record;
627
      }
628
    }
629

    
630
    foreach ($ldap_server_records as $sid => $ldap_server_record) {
631
      if ($ldap_authorization_record && $ldap_authorization_record->sid == $sid) {
632
        $consumer_type = $ldap_authorization_record->consumer_type;
633
        $field_changes['ldap_servers'][$sid]['groupFunctionalityUnused'] = 0;
634
        if ($ldap_authorization_record->derive_from_dn) {
635
          $field_changes['ldap_servers'][$sid]['groupDeriveFromDn'] = 1;
636
          $field_changes['ldap_servers'][$sid]['groupDeriveFromDnAttr'] = $ldap_authorization_record->derive_from_dn_attr;
637
        }
638
        if ($ldap_authorization_record->derive_from_attr) {
639
          $field_changes['ldap_servers'][$sid]['groupUserMembershipsAttrExists'] = 1;
640
          $field_changes['ldap_servers'][$sid]['groupUserMembershipsAttr'] = $ldap_authorization_record->derive_from_attr_attr;
641
        }
642
        if ($ldap_authorization_record->derive_from_entry) {
643
          $field_changes['ldap_servers'][$sid]['groupMembershipsAttr'] = $ldap_authorization_record->derive_from_entry_attr; // eg members
644
          $field_changes['ldap_servers'][$sid]['groupMembershipsAttrMatchingUserAttr'] = $ldap_authorization_record->derive_from_entry_entries_attr; // eg dn
645
        }
646
        if ($ldap_authorization_record->derive_from_entry_nested) {
647
          $field_changes['ldap_servers'][$sid]['groupNested'] = 1;
648
        }
649
        if ($ldap_authorization_record->derive_from_attr_use_first_attr || $ldap_authorization_record->derive_from_entry_use_first_attr) {
650
          $field_changes['ldap_authorization'][$consumer_type]['useFirstAttrAsGroupId'] = 1;
651
        }
652
      }
653
      else {
654
        $field_changes['ldap_servers'][$sid]['groupFunctionalityUnused'] = 1;
655
      }
656
    }
657
  }
658

    
659
  foreach ($field_changes as $table_name => $record) {
660
    foreach ($record as $id => $field_data) {
661
      if ($table_name == 'ldap_servers' || $table_name == 'ldap_authorization') {
662
        $id_field_name = 'sid';
663
      }
664
      else {
665
        continue;
666
      }
667
      if (count($field_data)) {
668
        $change_log[] = t("!table_name where !id_field_name = !id values updated", array(
669
          '!table_name' => $table_name,
670
          '!id_field_name' => $id_field_name,
671
          '!id' => $id,
672
          ));
673
        $num_updated = db_update($table_name)
674
          ->fields($field_data)
675
          ->condition($id_field_name, $id, '=')
676
          ->execute();
677
      }
678
    }
679
  }
680

    
681
  // 4.  remove ldap_authorization fields that are unused
682
  $ldap_authorization_fields_to_remove = array(
683
    'derive_from_dn',
684
    'derive_from_dn_attr',
685
    'derive_from_attr',
686
    'derive_from_entry',
687
    'derive_from_attr_attr',
688
    'derive_from_entry_attr',
689
    'derive_from_entry_entries_attr',
690
    'derive_from_entry_nested',
691
    'derive_from_entry_search_all',
692
    'derive_from_entry_use_first_attr',
693
    'derive_from_attr_use_first_attr',
694
  );
695

    
696
  foreach ($ldap_authorization_fields_to_remove as $ldap_authorization_field) {
697
    db_drop_field('ldap_authorization', $ldap_authorization_field);
698
  }
699
  $change_log[] = t("ldap_authorization table fields removed: !fields_removed", array('!fields_removed' => join(', ', $ldap_authorization_fields_to_remove)));
700

    
701

    
702
  //5. ldap_authentication and ldap_user changes are in variables, not tables
703

    
704
  $ldap_authentication_conf_data = variable_get('ldap_authentication_conf', array());
705
  if (!is_array($ldap_authentication_conf_data['sids'])) {
706
    $ldap_authentication_conf_data['sids'] = array();
707
  }
708

    
709
  $ldap_user_conf_data = variable_get('ldap_user_conf', array());
710

    
711
  $ldap_authentication_sids = array_keys($ldap_authentication_conf_data['sids']);
712
  if (count($ldap_authentication_sids) == 1) {
713
    $ldap_user_conf_data['drupalAcctProvisionServer'] = $ldap_authentication_sids[0];
714
  }
715

    
716
  // conflict log vs resolve moved from ldap_authentication to ldap_user
717
  if (!empty($ldap_authentication_conf_data['authenticationMode'])) {
718
    if ($ldap_authentication_conf_data['loginConflictResolve'] == LDAP_AUTHENTICATION_CONFLICT_LOG) {
719
      $ldap_user_conf_data['userConflictResolve'] = LDAP_USER_CONFLICT_LOG;
720
      $change_log[] = t('ldap_authentication_conf -> userConflictResolve set to') . LDAP_USER_CONFLICT_LOG;
721
    }
722
    elseif ($ldap_authentication_conf_data['loginConflictResolve'] == LDAP_AUTHENTICATION_CONFLICT_RESOLVE) {
723
      $ldap_user_conf_data['userConflictResolve'] = LDAP_USER_CONFLICT_RESOLVE;
724
      $change_log[] = t('ldap_authentication_conf -> userConflictResolve set to') . LDAP_USER_CONFLICT_RESOLVE;
725
    }
726
    unset($ldap_authentication_conf_data['loginConflictResolve']);
727
    $change_log[] = t('ldap_authentication_conf -> loginConflictResolve value removed');
728
  }
729
  else {
730
    $ldap_user_conf_data['userConflictResolve'] = LDAP_USER_CONFLICT_RESOLVE_DEFAULT;
731
    $change_log[] = t('ldap_authentication_conf -> userConflictResolve set to') . LDAP_USER_CONFLICT_RESOLVE_DEFAULT;
732
  }
733

    
734

    
735
  if (isset($ldap_authentication_conf_data['acctCreation'])) {
736
    $ldap_user_conf_data['acctCreation'] = $ldap_authentication_conf_data['acctCreation'];
737
    $change_log[] = t('ldap_user_conf -> acctCreation set to value in ldap_authentication_conf -> acctCreation');
738
    unset($ldap_authentication_conf_data['acctCreation']);
739
    $change_log[] = t('ldap_authentication_conf -> acctCreation value removed');
740
  }
741
  else {
742
    $ldap_user_conf_data['acctCreation'] = LDAP_USER_ACCT_CREATION_LDAP_BEHAVIOR_DEFAULT;
743
    $change_log[] = t('ldap_user_conf -> acctCreation set to default:') . ' ' . LDAP_USER_ACCT_CREATION_LDAP_BEHAVIOR_DEFAULT;
744
  }
745

    
746
  $ldap_user_conf_data['manualAccountConflict'] = LDAP_USER_MANUAL_ACCT_CONFLICT_REJECT;
747
  $change_log[] = t('ldap_user_conf -> manualAccountConflict set to default:') . ' ' . LDAP_USER_MANUAL_ACCT_CONFLICT_REJECT;
748

    
749
  $change_log[] = t('LDAP User configuration populated.');
750
  $change_log[] = t('LDAP Authentication configuration updated.');
751
  variable_set('ldap_authentication_conf', $ldap_authentication_conf_data);
752
  variable_set('ldap_user_conf', $ldap_user_conf_data);
753

    
754
  $summary = '<h2>' . t('Please check through all the LDAP module configuration pages.
755
    The update from 7.x-1.x to 7.x-2.x is not automatable!  The configuration pages
756
    must be read through and configured.') . '</h2>' .
757
    theme('item_list', array(
758
      'items' => $change_log,
759
      'type' => 'ul',
760
      'title' => 'Changes in 7.x-1.x to 7.x-2.x update')
761
    );
762

    
763
  watchdog('ldap_servers', $summary, array(), WATCHDOG_INFO);
764
  return $summary;
765

    
766

    
767
}
768

    
769
/**
770
 * make ldap_servers.bind_method field small int instead of tiny int for ctools bug
771
 */
772
function ldap_servers_update_7202() {
773

    
774
  db_change_field('ldap_servers', 'bind_method', 'bind_method', array(
775
    'type' => 'int',
776
    'size' => 'small',
777
    'not null' => TRUE,
778
    'default' => 0,
779
  ));
780

    
781
}
782

    
783
/**
784
 * make all schema field names lowercase in ldap server to deal with cronic case sensitivity issues
785
 */
786
function ldap_servers_update_7203() {
787
  $schema = ldap_servers_schema();
788
    $changes = array(
789
    'testingDrupalUserDn' => 'testing_drupal_user_dn',
790
    'group_object_category' => 'grp_object_cat',
791
    'groupFunctionalityUnused' => 'grp_unused',
792
    'groupNested' => 'grp_nested',
793
    'groupUserMembershipsAttrExists' => 'grp_user_memb_attr_exists',
794
    'groupUserMembershipsAttr' => 'grp_user_memb_attr',
795
    'groupMembershipsAttr' => 'grp_memb_attr',
796
    'groupMembershipsAttrMatchingUserAttr' => 'grp_memb_attr_match_user_attr',
797
    'groupDeriveFromDn' => 'grp_derive_from_dn',
798
    'groupDeriveFromDnAttr' => 'grp_derive_from_dn_attr',
799
    'groupTestGroupDn' => 'grp_test_grp_dn',
800
    'groupTestGroupDnWriteable' => 'grp_test_grp_dn_writeable'
801
  );
802
  foreach ($changes as $old_field_name => $new_field_name) {
803
    $field_schema = $schema['ldap_servers']['fields'][$new_field_name];
804
    if (ldap_servers_db_field_exists('ldap_servers', $old_field_name)) {
805
      if (ldap_servers_db_field_exists('ldap_servers', $new_field_name)) {
806
        db_drop_field('ldap_servers', $old_field_name);
807
      }
808
      else {
809
        db_change_field('ldap_servers', $old_field_name, $new_field_name, $field_schema);
810
      }
811
    }
812
  }
813

    
814
}
815

    
816
/**
817
 * Add picture_attr field in schema
818
 */
819
function ldap_servers_update_7204() {
820
  if (!ldap_servers_db_field_exists('ldap_servers', 'picture_attr')) {
821
    db_add_field(
822
      'ldap_servers',
823
      'picture_attr',
824
      array(
825
        'type' => 'varchar',
826
        'length' => 255,
827
        'not null' => FALSE,
828
      )
829
    );
830
  }
831
}
832

    
833

    
834
/**
835
 * fix any double serialized ldap server basedns
836
 */
837
function ldap_servers_update_7205() {
838

    
839
  module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
840
  $ldap_servers = ldap_servers_get_servers();
841
  foreach ($ldap_servers as $sid => $ldap_server) {
842
    if ($ldap_server->basedn && is_scalar($ldap_server->basedn)) {
843
      // these are still serialized after being loaded from db/ctools so were double serialized
844
      $ldap_server->basedn = unserialize($ldap_server->basedn);
845
      $ldap_server->save();
846
    }
847
  }
848

    
849
}
850

    
851

    
852
/**
853
 * Add LDAP Referrals fields in schema
854
 */
855
function ldap_servers_update_7206() {
856
  if (!ldap_servers_db_field_exists('ldap_servers', 'followrefs')) {
857
    db_add_field(
858
      'ldap_servers',
859
      'followrefs',
860
      array(
861
        'type' => 'int',
862
        'size' => 'tiny',
863
        'not null' => FALSE,
864
        'default' => 0,
865
      )
866
    );
867
  }
868
}
869

    
870
/**
871
 * Fixes a typo in an LDAP variable name.
872
 */
873
function ldap_servers_update_7207() {
874
    if (!is_null($old_var = variable_get('ldap_servers_require_ssl_for_credentails'))) {
875
      variable_set('ldap_servers_require_ssl_for_credentials', $old_var);
876
      variable_del('ldap_servers_require_ssl_for_credentails');
877
    }
878
}
879

    
880
/**
881
 * Removes HTTPS checking.
882
 */
883
function ldap_servers_update_7208() {
884
  variable_del('ldap_servers_require_ssl_for_credentials');
885
  return t('HTTPS validation was removed, if you need mixed mode consider another module such as securelogin for this. Mixed mode is strongly discouraged.');
886

    
887
}
888

    
889
function ldap_servers_install_update_schema($schema, &$change_log) {
890
  foreach ($schema as $table_name => $table_schema) {
891
    foreach ($table_schema['fields'] as $field_name => $field_schema) {
892
      if (!ldap_servers_db_field_exists($table_name, $field_name)) {
893
        db_add_field($table_name, $field_name, $field_schema);
894
        $change_log[] = t("!field_name field added to !table_name table", array('!field_name' => $field_name, '!table_name' => $table_name));
895
      }
896
    }
897
  }
898
}