Projet

Général

Profil

Paste
Télécharger (28,6 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ldap / ldap_servers / ldap_servers.install @ 5136ce55

1
<?php
2

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

    
8

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

    
14
}
15

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

    
24
}
25

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

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

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

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

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

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

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

    
84
        try {
85
          $connect_result = $server->connect();
86
          if ($connect_result == LDAP_SUCCESS) {
87
            $bind_result = $server->bind();
88
            if ($bind_result == LDAP_SUCCESS) {
89
              $requirements[$server_req_key]['value'] = $t('Connection: Success, Bind: Success', $server_tokens);
90
              $requirements[$server_req_key]['severity'] = REQUIREMENT_OK;
91
            }
92
          }
93
          $server->disconnect();
94
        }
95
        catch (Exception $e) {
96
        }
97
      }
98
    }
99
  }
100

    
101
  return $requirements;
102
}
103

    
104
/**
105
 * Implements hook_schema().
106
 */
107
function ldap_servers_schema() {
108
  module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
109
  module_load_include('module', 'ldap_servers', 'ldap_servers'); // to get the LDAP_SERVERS_ENC_TYPE_CLEARTEXT constants issue#1209576
110
  module_load_include('php', 'ldap_servers', 'LdapServerAdmin.class');
111

    
112
  $schema['ldap_servers'] = array(
113
    'export' => array(
114
      'key' => 'sid',
115
      'key name' => 'Server ID',
116
      'primary key' => 'numeric_sid',
117
      'identifier' => 'ldap_servers_conf',
118
      'api' => array(
119
        'owner' => 'ldap_servers',
120
        'api' => 'ldap_servers',
121
        'minimum_version' => 1,
122
        'current_version' => 1,
123
        ),
124
      ),
125
    'primary key' => array('numeric_sid'),
126
    'unique keys' => array('name' => array('name')),
127
  );
128

    
129
  $fields = LdapServerAdmin::fields();
130
  foreach ($fields as $name => $props) {
131
    if (isset($props['schema'])) {
132
      $schema['ldap_servers']['fields'][$name] = $props['schema'];
133
    }
134
  }
135

    
136
  return $schema;
137

    
138
}
139

    
140
/**
141
 * rename ldap_servers type field to ldap_type
142
 */
143

    
144
function ldap_servers_update_7100() {
145
  if (!ldap_servers_db_field_exists('ldap_servers', 'ldap_type') && ldap_servers_db_field_exists('ldap_servers', 'type')) {
146
    db_change_field('ldap_servers', 'type', 'ldap_type', array(
147
      'type' => 'varchar',
148
      'length' => 20,
149
      'not null' => FALSE
150
    ));
151
  }
152

    
153
  return t('ldap_servers table field "type" renamed to "ldap_type"');
154

    
155
}
156

    
157
/**
158
 * ldap_server table field changes
159
 */
160

    
161
function ldap_servers_update_7101() {
162

    
163
  db_add_field(
164
    'ldap_servers',
165
    'allow_conflicting_drupal_accts',
166
    array(
167
      'type' => 'int',
168
      'size' => 'tiny',
169
      'not null' => FALSE,
170
      'default' => 0,
171
    )
172
  );
173

    
174
  db_add_field(
175
    'ldap_servers',
176
    'unique_persistent_attr',
177
    array(
178
      'type' => 'varchar',
179
      'length' => '64',
180
      'not null' => FALSE,
181
    )
182
  );
183

    
184
  db_add_field(
185
    'ldap_servers',
186
    'mail_template',
187
    array(
188
      'type' => 'varchar',
189
      'length' => '255',
190
      'not null' => FALSE,
191
    )
192
  );
193

    
194
  db_change_field('ldap_servers', 'ldap_to_drupal_user', 'ldap_to_drupal_user', array(
195
    'type' => 'varchar',
196
    'length' => 1024,
197
    'not null' => FALSE
198
  ));
199

    
200
  db_change_field('ldap_servers', 'binddn', 'binddn', array(
201
    'type' => 'varchar',
202
    'length' => 511,
203
  ));
204

    
205

    
206
  return t('Updated LDAP Server to include "allow_conflicting_drupal_accts" and "unique_persistent_attr" fields.');
207
}
208

    
209

    
210
/**
211
 * add bind_method field to ldap_servers table
212
 */
213
function ldap_servers_update_7102() {
214

    
215
  if (!ldap_servers_db_field_exists('ldap_servers', 'bind_method')) {
216
    db_add_field('ldap_servers', 'bind_method', array(
217
      'type' => 'int',
218
      'size' => 'tiny',
219
      'not null' => TRUE,
220
      'default' => 0,
221
    ));
222
    $msg = t('"bind_method" field added to ldap_servers table');
223
  }
224

    
225
  return ($msg) ? $msg :  t('No database changes made.');
226
}
227

    
228
/**
229
 * add group_object_category field to ldap_servers table
230
 */
231
function ldap_servers_update_7103() {
232

    
233
  if (!ldap_servers_db_field_exists('ldap_servers', 'group_object_category')) {
234
    db_add_field('ldap_servers', 'group_object_category', array(
235
      'type' => 'varchar',
236
      'length' => 64,
237
      'not null' => FALSE,
238
    ));
239
    $msg = t('"group_object_category" field added to ldap_servers table');
240
  }
241

    
242
  return ($msg) ? $msg :  t('No database changes made.');
243
}
244

    
245

    
246
/**
247
 * add pagination fields to ldap_servers table
248
 */
249
function ldap_servers_update_7104() {
250

    
251
  if (!ldap_servers_db_field_exists('ldap_servers', 'search_pagination')) {
252
    db_add_field('ldap_servers', 'search_pagination', array(
253
      'type' => 'int',
254
      'size' => 'tiny',
255
      'not null' => FALSE,
256
      'default' => 0,
257
    ));
258
    $msg = t('"search_pagination" field added to ldap_servers table');
259
  }
260

    
261
  if (!ldap_servers_db_field_exists('ldap_servers', 'search_page_size')) {
262
    db_add_field('ldap_servers', 'search_page_size', array(
263
      'type' => 'int',
264
      'size' => 'medium',
265
      'not null' => FALSE,
266
      'default' => 1000,
267
    ));
268
    $msg .= '<br/>' . t('"search_page_size" field added to ldap_servers table');
269
  }
270

    
271
  if (!ldap_servers_db_field_exists('ldap_servers', 'unique_persistent_attr_binary')) {
272
    db_add_field('ldap_servers', 'unique_persistent_attr_binary', array(
273
      'type' => 'int',
274
      'size' => 'tiny',
275
      'not null' => FALSE,
276
      'default' => 0,
277
    ));
278
    $msg = t('"unique_persistent_attr_binary" field added to ldap_servers table');
279
  }
280

    
281

    
282

    
283
  return ($msg) ? $msg :  t('No database changes made.');
284
}
285

    
286
/**
287
 * enable ldap_user module
288
 */
289
function ldap_servers_update_7105() {
290

    
291
  if (!module_exists('ldap_user')) {
292
    module_enable(array('ldap_user'));
293
    $msg = t('LDAP User module enabled.  Some authentication and authorization functionality shifted to LDAP User module.');
294
  }
295

    
296
  return ($msg) ? $msg :  t('LDAP User module was already enabled.  No action taken.');
297
}
298

    
299

    
300

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

    
316
  return ($msg) ? $msg :  t('No database changes made.');
317
}
318

    
319
/**
320
 *  remove allow_conflicting_drupal_accts from ldap_servers table
321
 */
322
function ldap_servers_update_7107() {
323
  if (ldap_servers_db_field_exists('ldap_servers', 'allow_conflicting_drupal_accts')) {
324
    db_drop_field('ldap_servers', 'allow_conflicting_drupal_accts');
325
    $msg = t('"allow_conflicting_drupal_accts" field removed from ldap_servers table');
326
  }
327
  return ($msg) ? $msg :  t('No database changes made.');
328
}
329

    
330

    
331

    
332
function ldap_servers_db_field_exists($table, $field_name) {
333
  if (!db_field_exists($table, $field_name) && !db_field_exists($table, drupal_strtolower($field_name)) ) {
334
    return false;
335
  }
336
  else {
337
    return true;
338
  }
339
}
340
/**
341
 * add group related fields to ldap_servers table
342
 */
343
function ldap_servers_update_7108() {
344

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

    
368

    
369
/**
370
 * adjust group related fields to ldap_servers table
371
 */
372
function ldap_servers_update_7109() {
373

    
374
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupNested')) {
375
    db_add_field('ldap_servers', 'groupNested', array(
376
      'type' => 'int',
377
      'size' => 'tiny',
378
      'not null' => FALSE,
379
      'default' => 0,
380
    ));
381
    $msg = t('"groupNested" field added to ldap_servers table');
382
  }
383

    
384
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUseFirstAttr')) {
385
    db_add_field('ldap_servers', 'groupUseFirstAttr', array(
386
      'type' => 'int',
387
      'size' => 'tiny',
388
      'not null' => FALSE,
389
      'default' => 0,
390
    ));
391
    $msg .= '<br/>' . t('"groupUseFirstAttr" field added to ldap_servers table');
392
  }
393

    
394
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupSearchAll')) {
395
    db_add_field('ldap_servers', 'groupSearchAll', array(
396
      'type' => 'int',
397
      'size' => 'tiny',
398
      'not null' => FALSE,
399
      'default' => 0,
400
    ));
401
    $msg = t('"groupSearchAll" field added to ldap_servers table');
402
  }
403

    
404
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttrExists')) {
405
    db_add_field('ldap_servers', 'groupUserMembershipsAttrExists', array(
406
      'type' => 'int',
407
      'size' => 'tiny',
408
      'not null' => FALSE,
409
      'default' => 0,
410
    ));
411
    $msg = t('"groupUserMembershipsAttrExists" field added to ldap_servers table');
412
  }
413

    
414
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttr')) {
415
    db_add_field('ldap_servers', 'groupUserMembershipsAttr', array(
416
      'type' => 'varchar',
417
      'length' => '255',
418
      'not null' => FALSE,
419
    ));
420
    $msg = t('"groupUserMembershipsAttr" field added to ldap_servers table');
421
  }
422

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

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

    
441
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttrExists')) {
442
    db_add_field('ldap_servers', 'groupUserMembershipsAttrExists', array(
443
      'type' => 'int',
444
      'size' => 'tiny',
445
      'not null' => FALSE,
446
      'default' => 0,
447
    ));
448
    $msg = t('"groupUserMembershipsAttrExists" field added to ldap_servers table');
449
  }
450

    
451
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupUserMembershipsAttr')) {
452
    db_add_field('ldap_servers', 'groupUserMembershipsAttr', array(
453
      'type' => 'varchar',
454
      'length' => '255',
455
      'not null' => FALSE,
456
    ));
457
    $msg = t('"groupUserMembershipsAttr" field added to ldap_servers table');
458
  }
459

    
460
}
461

    
462
/**
463
 * adjust group related fields to ldap_servers table
464
 */
465
function ldap_servers_update_7110() {
466

    
467
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupFunctionalityUnused')) {
468
    db_add_field('ldap_servers', 'groupFunctionalityUnused', array(
469
      'type' => 'int',
470
      'size' => 'tiny',
471
      'not null' => FALSE,
472
      'default' => 0,
473
    ));
474
    $msg = t('"groupFunctionalityUnused" field added to ldap_servers table');
475
  }
476

    
477
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupTestGroupDn')) {
478
    db_add_field('ldap_servers', 'groupTestGroupDn', array(
479
      'type' => 'varchar',
480
      'length' => '255',
481
      'not null' => FALSE,
482
    ));
483
    $msg = t('"groupTestGroupDn" field added to ldap_servers table');
484
  }
485

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

    
495
}
496

    
497
/**
498
 * add field groupTestGroupDnWriteable to ldap_servers table
499
 */
500
function ldap_servers_update_7111() {
501

    
502
  if (!ldap_servers_db_field_exists('ldap_servers', 'groupTestGroupDnWriteable')) {
503
    db_add_field('ldap_servers', 'groupTestGroupDnWriteable', array(
504
      'type' => 'varchar',
505
      'length' => '255',
506
      'not null' => FALSE,
507
    ));
508
    $msg = t('"groupTestGroupDnWriteable" field added to ldap_servers table');
509
  }
510

    
511
}
512

    
513
/**
514
 * add field testingDrupalUserDn to ldap_servers table
515
 */
516
function ldap_servers_update_7112() {
517

    
518
  if (!ldap_servers_db_field_exists('ldap_servers', 'testingDrupalUserDn')) {
519
    db_add_field('ldap_servers', 'testingDrupalUserDn', array(
520
      'type' => 'varchar',
521
      'length' => '255',
522
      'not null' => FALSE,
523
    ));
524
    $msg = t('"testingDrupalUserDn" field added to ldap_servers table');
525
  }
526

    
527
}
528

    
529

    
530
/**
531
 * upgrade as much as feasible for 7.1 to 7.2 branch
532
 */
533
function ldap_servers_update_7201() {
534

    
535
  $change_log = array();
536

    
537
  // 1. ldap_user is now required for ldap_authentication and ldap_authorization
538
  if (module_exists('ldap_authentication') || module_exists('ldap_authorization')) {
539
    module_enable(array('ldap_user'), TRUE);
540
    $change_log[] = t('LDAP User Module Enabled');
541
  }
542

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

    
589

    
590
  // 2.  add any missing fields from schema
591
  ldap_servers_install_update_schema(ldap_servers_schema(), $change_log);
592
  if (module_exists('ldap_authorization')) {
593
    ldap_servers_install_update_schema(ldap_authorization_schema(), $change_log);
594
  }
595
  if (module_exists('ldap_query')) {
596
    ldap_servers_install_update_schema(ldap_query_schema(), $change_log);
597
  }
598

    
599
  // 3.  move configuration data that has changed location within ldap modules
600
  $field_changes = array();
601
  $ldap_server_records = array();
602
  $select = db_select('ldap_servers')
603
    ->fields('ldap_servers')
604
    ->execute();
605
  foreach ($select as $record) {
606
    $ldap_server_records[$record->sid] = $record;
607
  }
608

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

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

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

    
675
  // 4.  remove ldap_authorization fields that are unused
676
  $ldap_authorization_fields_to_remove = array(
677
    'derive_from_dn',
678
    'derive_from_dn_attr',
679
    'derive_from_attr',
680
    'derive_from_entry',
681
    'derive_from_attr_attr',
682
    'derive_from_entry_attr',
683
    'derive_from_entry_entries_attr',
684
    'derive_from_entry_nested',
685
    'derive_from_entry_search_all',
686
    'derive_from_entry_use_first_attr',
687
    'derive_from_attr_use_first_attr',
688
  );
689

    
690
  foreach ($ldap_authorization_fields_to_remove as $ldap_authorization_field) {
691
    db_drop_field('ldap_authorization', $ldap_authorization_field);
692
  }
693
  $change_log[] = t("ldap_authorization table fields removed: !fields_removed", array('!fields_removed' => join(', ', $ldap_authorization_fields_to_remove)));
694

    
695

    
696
  //5. ldap_authentication and ldap_user changes are in variables, not tables
697

    
698
  $ldap_authentication_conf_data = variable_get('ldap_authentication_conf', array());
699
  $ldap_user_conf_data = variable_get('ldap_user_conf', array());
700

    
701
  $ldap_authentication_sids = array_keys($ldap_authentication_conf_data['sids']);
702
  if (count($ldap_authentication_sids) == 1) {
703
    $ldap_user_conf_data['drupalAcctProvisionServer'] = $ldap_authentication_sids[0];
704
  }
705

    
706
  // conflict log vs resolve moved from ldap_authentication to ldap_user
707
  if (!empty($ldap_authentication_conf_data['authenticationMode'])) {
708
    if ($ldap_authentication_conf_data['loginConflictResolve'] == LDAP_AUTHENTICATION_CONFLICT_LOG) {
709
      $ldap_user_conf_data['userConflictResolve'] = LDAP_USER_CONFLICT_LOG;
710
      $change_log[] = t('ldap_authentication_conf -> userConflictResolve set to') . LDAP_USER_CONFLICT_LOG;
711
    }
712
    elseif ($ldap_authentication_conf_data['loginConflictResolve'] == LDAP_AUTHENTICATION_CONFLICT_RESOLVE) {
713
      $ldap_user_conf_data['userConflictResolve'] = LDAP_USER_CONFLICT_RESOLVE;
714
      $change_log[] = t('ldap_authentication_conf -> userConflictResolve set to') . LDAP_USER_CONFLICT_RESOLVE;
715
    }
716
    unset($ldap_authentication_conf_data['loginConflictResolve']);
717
    $change_log[] = t('ldap_authentication_conf -> loginConflictResolve value removed');
718
  }
719
  else {
720
    $ldap_user_conf_data['userConflictResolve'] = LDAP_USER_CONFLICT_RESOLVE_DEFAULT;
721
    $change_log[] = t('ldap_authentication_conf -> userConflictResolve set to') . LDAP_USER_CONFLICT_RESOLVE_DEFAULT;
722
  }
723

    
724

    
725
  if (isset($ldap_authentication_conf_data['acctCreation'])) {
726
    $ldap_user_conf_data['acctCreation'] = $ldap_authentication_conf_data['acctCreation'];
727
    $change_log[] = t('ldap_user_conf -> acctCreation set to value in ldap_authentication_conf -> acctCreation');
728
    unset($ldap_authentication_conf_data['acctCreation']);
729
    $change_log[] = t('ldap_authentication_conf -> acctCreation value removed');
730
  }
731
  else {
732
    $ldap_user_conf_data['acctCreation'] = LDAP_USER_ACCT_CREATION_LDAP_BEHAVIOR_DEFAULT;
733
    $change_log[] = t('ldap_user_conf -> acctCreation set to default:') . ' ' . LDAP_USER_ACCT_CREATION_LDAP_BEHAVIOR_DEFAULT;
734
  }
735

    
736
  $ldap_user_conf_data['manualAccountConflict'] = LDAP_USER_MANUAL_ACCT_CONFLICT_REJECT;
737
  $change_log[] = t('ldap_user_conf -> manualAccountConflict set to default:') . ' ' . LDAP_USER_MANUAL_ACCT_CONFLICT_REJECT;
738

    
739
  $change_log[] = t('LDAP User configuration populated.');
740
  $change_log[] = t('LDAP Authentication configuration updated.');
741
  variable_set('ldap_authentication_conf', $ldap_authentication_conf_data);
742
  variable_set('ldap_user_conf', $ldap_user_conf_data);
743

    
744
  $summary = '<h2>' . t('Please check through all the LDAP module configuration pages.
745
    The update from 7.x-1.x to 7.x-2.x is not automatable!  The configuration pages
746
    must be read through and configured.') . '</h2>' .
747
    theme('item_list', array(
748
      'items' => $change_log,
749
      'type' => 'ul',
750
      'title' => 'Changes in 7.x-1.x to 7.x-2.x update')
751
    );
752

    
753
  watchdog('ldap_servers', $summary, WATCHDOG_INFO);
754
  return $summary;
755

    
756

    
757
}
758

    
759
/**
760
 * make ldap_servers.bind_method field small int instead of tiny int for ctools bug
761
 */
762
function ldap_servers_update_7202() {
763

    
764
  db_change_field('ldap_servers', 'bind_method', 'bind_method', array(
765
    'type' => 'int',
766
    'size' => 'small',
767
    'not null' => TRUE,
768
    'default' => 0,
769
  ));
770

    
771
}
772

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

    
804
}
805

    
806
/**
807
 * Add picture_attr field in schema
808
 */
809
function ldap_servers_update_7204() {
810
  if (!ldap_servers_db_field_exists('ldap_servers', 'picture_attr')) {
811
    db_add_field(
812
      'ldap_servers',
813
      'picture_attr',
814
      array(
815
        'type' => 'varchar',
816
        'length' => 255,
817
        'not null' => FALSE,
818
      )
819
    );
820
  }
821
}
822

    
823

    
824
/**
825
 * fix any double serialized ldap server basedns
826
 */
827
function ldap_servers_update_7205() {
828

    
829
  module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
830
  $ldap_servers = ldap_servers_get_servers();
831
  foreach ($ldap_servers as $sid => $ldap_server) {
832
    if ($ldap_server->basedn && is_scalar($ldap_server->basedn)) {
833
      // these are still serialized after being loaded from db/ctools so were double serialized
834
      $ldap_server->basedn = unserialize($ldap_server->basedn);
835
      $ldap_server->save();
836
    }
837
  }
838

    
839
}
840

    
841

    
842
/**
843
 * Add LDAP Referrals fields in schema
844
 */
845
function ldap_servers_update_7206() {
846
  if (!ldap_servers_db_field_exists('ldap_servers', 'followrefs')) {
847
    db_add_field(
848
      'ldap_servers',
849
      'followrefs',
850
      array(
851
        'type' => 'int',
852
        'size' => 'tiny',
853
        'not null' => FALSE,
854
        'default' => 0,
855
      )
856
    );
857
  }
858
}
859

    
860
function ldap_servers_install_update_schema($schema, &$change_log) {
861
  foreach ($schema as $table_name => $table_schema) {
862
    foreach ($table_schema['fields'] as $field_name => $field_schema) {
863
      if (!ldap_servers_db_field_exists($table_name, $field_name)) {
864
        db_add_field($table_name, $field_name, $field_schema);
865
        $change_log[] = t("!field_name field added to !table_name table", array('!field_name' => $field_name, '!table_name' => $table_name));
866
      }
867
    }
868
  }
869
}