- Timestamp:
- Feb 19, 2008, 10:09:10 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20080219/psModules/src/config/pmConfig.c
r16415 r16542 34 34 #endif // ifdef HAVE_NEBCLIENT 35 35 36 #define PS_SITE "PS_SITE" // Name of the environment variable containing the siteconfig file37 #define PS_DEFAULT_SITE ".ipprc" // Default siteconfig file36 #define IPPRC_ENV "IPPRC" // Name of the environment variable containing the top-level config file 37 #define IPPRC_FILE ".ipprc" // Default top-level config file 38 38 39 39 #define DEFAULT_LOG STDERR_FILENO // Default file descriptor for log messages … … 52 52 static void configFree(pmConfig *config) 53 53 { 54 psFree(config->site); 54 psFree(config->xxUser); 55 psFree(config->xxSite); 56 psFree(config->xxSystem); 55 57 psFree(config->files); 56 58 psFree(config->camera); … … 80 82 81 83 // Initialise 82 config->site = NULL; 84 config->xxUser = NULL; 85 config->xxSite = NULL; 86 config->xxSystem = NULL; 83 87 config->camera = NULL; 84 88 config->cameraName = NULL; … … 145 149 PS_ASSERT_STRING_NON_EMPTY(path,); 146 150 147 pmConfigDone(); 151 assert (configPath == NULL); 152 // XXX why was this being called? pmConfigSet should only be called once... 153 // pmConfigDone(); 148 154 149 155 psList *list = psStringSplit(path, ":", false); … … 159 165 void pmConfigDone(void) 160 166 { 161 psFree(configPath); 167 if (configPath) { 168 psFree(configPath); 169 } 162 170 configPath = NULL; 163 171 … … 380 388 config->defaultRecipe = defaultRecipe; 381 389 382 // 383 // The following section of code attempts to determine which file is 384 // the configuration file. At the end of this code block, the siteName 390 // The following section of code attempts to determine which file to use as the 391 // top-level the configuration file. At the end of this code block, the configFile 385 392 // variable will contain the name of the configuration file. 386 // 387 char * siteName = NULL;393 394 char *configFile = NULL; 388 395 // 389 396 // First, try command line 390 397 // 391 psS32 argNum = psArgumentGet(*argc, argv, "- site");398 psS32 argNum = psArgumentGet(*argc, argv, "-ipprc"); 392 399 if (argNum != 0) { 393 // 394 // We remove the "-site" argument from argv. Then 395 // we look for the next argument, which should be the filename, and 396 // remove it as well. 397 // 400 // remove the "-ipprc" argument from argv, check and remove filename 398 401 psArgumentRemove(argNum, argc, argv); 399 402 if (argNum >= *argc) { 400 psWarning("- sitecommand-line switch provided without the required filename --- ignored.\n");403 psWarning("-ipprc command-line switch provided without the required filename --- ignored.\n"); 401 404 } else { 402 siteName = psStringCopy(argv[argNum]);405 configFile = psStringCopy(argv[argNum]); 403 406 psArgumentRemove(argNum, argc, argv); 404 407 } … … 407 410 // Next, try environment variable 408 411 // 409 if (! siteName) {410 siteName = getenv(PS_SITE);411 if ( siteName) {412 siteName = psStringCopy (siteName);412 if (!configFile) { 413 configFile = getenv(IPPRC_ENV); 414 if (configFile) { 415 configFile = psStringCopy (configFile); 413 416 } 414 417 } … … 417 420 // Last chance is ~/.ipprc 418 421 // 419 if (! siteName) {422 if (!configFile) { 420 423 char *home = getenv("HOME"); 421 siteName = psStringCopy(home);422 psStringAppend(& siteName, "/%s", PS_DEFAULT_SITE);424 configFile = psStringCopy(home); 425 psStringAppend(&configFile, "/%s", IPPRC_FILE); 423 426 } 424 427 425 428 426 429 // We have the configuration filename; now we read and parse the config 427 // file and store in psMetadata struct site.428 // 429 430 if (!pmConfigFileRead(&config-> site, siteName, "site")) {430 // file and store in psMetadata struct xxUser. 431 // XXX move this section to pmConfigReadUser.c ? 432 433 if (!pmConfigFileRead(&config->xxUser, configFile, "user")) { 431 434 psFree(config); 432 435 return NULL; 433 436 } 434 437 435 // Set options based on the siteconfiguration.438 // Set options based on the user configuration. 436 439 { 437 440 bool mdok = true; // Status of MD lookup result 438 441 439 // Initialise the psLib time handling440 psString timeName = psMetadataLookupStr(&mdok, config->site, "TIME");441 if (mdok && timeName)442 {443 psTrace("psModules.config", 7, "Initialising psTime with file %s\n", timeName);444 psTimeInit(timeName);445 }446 447 448 442 // Set logging level 449 int logLevel = psMetadataLookupS32(&mdok, config-> site, "LOGLEVEL");443 int logLevel = psMetadataLookupS32(&mdok, config->xxUser, "LOGLEVEL"); 450 444 if (mdok && logLevel >= 0) 451 445 { … … 456 450 457 451 // Set logging format 458 psString logFormat = psMetadataLookupStr(&mdok, config-> site, "LOGFORMAT");452 psString logFormat = psMetadataLookupStr(&mdok, config->xxUser, "LOGFORMAT"); 459 453 if (mdok && logFormat) 460 454 { … … 463 457 } 464 458 465 // Set logging destination first from command line, second from siteconfiguration459 // Set logging destination first from command line, second from user configuration 466 460 psString logDest = NULL; // Logging destination 467 461 argNum = psArgumentGet(*argc, argv, "-log"); … … 477 471 } 478 472 if (!logDest) { 479 logDest = psMemIncrRefCounter(psMetadataLookupStr(&mdok, config-> site, "LOGDEST"));473 logDest = psMemIncrRefCounter(psMetadataLookupStr(&mdok, config->xxUser, "LOGDEST")); 480 474 } 481 475 if (logDest) { … … 497 491 498 492 // Set trace levels 499 psMetadata *trace = psMetadataLookupMetadata(&mdok, config-> site, "TRACE");493 psMetadata *trace = psMetadataLookupMetadata(&mdok, config->xxUser, "TRACE"); 500 494 if (mdok && trace) { 501 495 psMetadataIterator *traceIter = psMetadataIteratorAlloc(trace, PS_LIST_HEAD, NULL); // Iterator … … 515 509 516 510 // Set trace formats 517 psString traceFormat = psMetadataLookupStr(&mdok, config-> site, "TRACEFORMAT");511 psString traceFormat = psMetadataLookupStr(&mdok, config->xxUser, "TRACEFORMAT"); 518 512 if (mdok && traceFormat) { 519 513 psTrace("psModules.config", 7, "Setting trace format to %s\n", traceFormat); … … 535 529 } 536 530 if (!traceDest) { 537 traceDest = psMemIncrRefCounter(psMetadataLookupStr(&mdok, config-> site, "TRACEDEST"));531 traceDest = psMemIncrRefCounter(psMetadataLookupStr(&mdok, config->xxUser, "TRACEDEST")); 538 532 } 539 533 if (traceDest) { … … 563 557 } 564 558 565 // define the config-file search path (configPath). Ensure that 566 // it contains the directory where we found the config file in 567 // the first place 568 if (configPath) { 569 pmConfigDone(); 570 } 571 572 psString siteNameDir = psStringCopy(dirname(siteName)); 573 psFree(siteName); 574 575 psString path = psMetadataLookupStr(NULL, config->site, "PATH"); 576 psString newPath = NULL; // New path 577 // The following gymnastics with 'newPath' are required to avoid changing the pointer out from under the 578 // psMetadataItem on which 'path' sits (leading to memory corruption because it no longer points to valid 579 // memory). 580 if (path) { 581 psStringAppend(&newPath, "%s:%s", path, siteNameDir); 582 } else { 583 newPath = psMemIncrRefCounter(siteNameDir); 584 } 585 psFree(siteNameDir); 586 pmConfigSet(newPath); 587 psFree(newPath); 559 // XXX why was this being called here? Is someone calling pmConfigRead multiple times? 560 // pmConfigDone(); 561 assert (configPath == NULL); 562 563 // define the config-file search path (configPath). 564 psString path = psMetadataLookupStr(NULL, config->xxUser, "PATH"); 565 pmConfigSet (path); 566 567 // load the SITE file 568 psString siteFile = psMetadataLookupStr(NULL, config->xxUser, "SITE"); 569 if (!pmConfigFileRead(&config->xxSite, siteFile, "site")) { 570 psFree(config); 571 return NULL; 572 } 573 574 // load the SYSTEM file 575 psString systemFile = psMetadataLookupStr(NULL, config->xxUser, "SYSTEM"); 576 if (!pmConfigFileRead(&config->xxSystem, systemFile, "system")) { 577 psFree(config); 578 return NULL; 579 } 580 581 // XXX read TIME from SITE (or system?) 582 { 583 bool mdok = true; 584 585 // Initialise the psLib time handling 586 // XXX is this still needed / desired? 587 psString timeName = psMetadataLookupStr(&mdok, config->xxSite, "TIME"); 588 if (mdok && timeName) 589 { 590 psTrace("psModules.config", 7, "Initialising psTime with file %s\n", timeName); 591 psTimeInit(timeName); 592 } 593 } 588 594 589 595 // Next, we do a similar thing for the camera configuration file. The 590 596 // file is read and parsed into psMetadata struct "camera". 591 //592 597 argNum = psArgumentGet(*argc, argv, "-camera"); 593 598 if (argNum > 0) { … … 600 605 char *cameraName = argv[argNum]; // symbolic name of the camera 601 606 602 // look for the CAMERAS list in config-> site603 psMetadata *cameras = psMetadataLookupMetadata(&mdok, config-> site, "CAMERAS");607 // look for the CAMERAS list in config->xxSystem 608 psMetadata *cameras = psMetadataLookupMetadata(&mdok, config->xxSystem, "CAMERAS"); 604 609 if (!cameras) { 605 610 psError(PS_ERR_IO, false, "Unable to find CAMERAS in site configuration.\n"); … … 647 652 "Camera specified on command line", config->camera); 648 653 649 if (!pmConfigCameraSkycellVersion(config-> site, cameraName)) {654 if (!pmConfigCameraSkycellVersion(config->xxSystem, cameraName)) { 650 655 psError(PS_ERR_UNKNOWN, false, 651 656 "Unable to generate skycell versions of specified camera %s.\n", … … 655 660 } 656 661 657 if (!pmConfigCameraMosaickedVersions(config-> site, cameraName)) {662 if (!pmConfigCameraMosaickedVersions(config->xxSystem, cameraName)) { 658 663 psError(PS_ERR_UNKNOWN, false, 659 664 "Unable to generate mosaicked versions of specified camera %s.\n", … … 668 673 if (!config->camera && readCameraConfig) { 669 674 bool mdok; // Status of MD lookup 670 psMetadata *cameras = psMetadataLookupMetadata(&mdok, config-> site, "CAMERAS"); // List of cameras675 psMetadata *cameras = psMetadataLookupMetadata(&mdok, config->xxSystem, "CAMERAS"); // List of cameras 671 676 if (!mdok || !cameras) { 672 psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find CAMERAS in the s iteconfiguration.\n");677 psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find CAMERAS in the system configuration.\n"); 673 678 return false; 674 679 } 675 680 676 681 if (!metadataReadFiles(cameras, "camera configuration")) { 677 psError(PS_ERR_UNKNOWN, false, "Unable to read cameras within s iteconfiguration.\n");682 psError(PS_ERR_UNKNOWN, false, "Unable to read cameras within system configuration.\n"); 678 683 psFree(config); 679 684 return NULL; … … 702 707 psFree(iter); 703 708 704 if (!pmConfigCameraSkycellVersionsAll(config-> site)) {709 if (!pmConfigCameraSkycellVersionsAll(config->xxSystem)) { 705 710 psError(PS_ERR_UNKNOWN, false, "Unable to generate skycell versions of cameras.\n"); 706 711 psFree(config); 707 712 return NULL; 708 713 } 709 if (!pmConfigCameraMosaickedVersionsAll(config-> site)) {714 if (!pmConfigCameraMosaickedVersionsAll(config->xxSystem)) { 710 715 psError(PS_ERR_UNKNOWN, false, "Unable to generate mosaicked versions of cameras.\n"); 711 716 psFree(config); … … 715 720 716 721 // Load the recipes from the camera file, if appropriate 717 if(!pmConfigReadRecipes(config, PM_RECIPE_SOURCE_S ITE| PM_RECIPE_SOURCE_CAMERA)) {722 if(!pmConfigReadRecipes(config, PM_RECIPE_SOURCE_SYSTEM | PM_RECIPE_SOURCE_CAMERA)) { 718 723 psError(PS_ERR_IO, false, "Failed to read recipes from camera file"); 719 724 psFree(config); … … 746 751 psArgumentRemove(argNum, argc, argv); 747 752 748 psMetadata *cameras = psMetadataLookupMetadata(NULL, config-> site, "CAMERAS"); // List of cameras753 psMetadata *cameras = psMetadataLookupMetadata(NULL, config->xxSystem, "CAMERAS"); // List of cameras 749 754 if (!cameras) { 750 755 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find CAMERAS in the site configuration.\n"); … … 794 799 } else { 795 800 char *dbserver = argv[argNum]; // The camera configuration file to read 796 if (!psMetadataAddStr(config-> site, PS_LIST_TAIL, "DBSERVER", PS_META_REPLACE, NULL, dbserver)) {801 if (!psMetadataAddStr(config->xxSite, PS_LIST_TAIL, "DBSERVER", PS_META_REPLACE, NULL, dbserver)) { 797 802 psWarning("Failed to overwrite .ipprc DBSERVER value"); 798 803 } … … 809 814 } else { 810 815 char *dbname = argv[argNum]; // The camera configuration file to read 811 if (!psMetadataAddStr(config-> site, PS_LIST_TAIL, "DBNAME", PS_META_REPLACE, NULL, dbname)) {816 if (!psMetadataAddStr(config->xxSite, PS_LIST_TAIL, "DBNAME", PS_META_REPLACE, NULL, dbname)) { 812 817 psWarning("Failed to overwrite .ipprc DBNAME value"); 813 818 } … … 824 829 } else { 825 830 char *dbuser = argv[argNum]; // The camera configuration file to read 826 if (!psMetadataAddStr(config-> site, PS_LIST_TAIL, "DBUSER", PS_META_REPLACE, NULL, dbuser)) {831 if (!psMetadataAddStr(config->xxSite, PS_LIST_TAIL, "DBUSER", PS_META_REPLACE, NULL, dbuser)) { 827 832 psWarning("Failed to overwrite .ipprc DBUSER value"); 828 833 } … … 839 844 } else { 840 845 char *dbpassword = argv[argNum]; // The camera configuration file to read 841 if (!psMetadataAddStr(config-> site, PS_LIST_TAIL, "DBPASSWORD", PS_META_REPLACE,846 if (!psMetadataAddStr(config->xxSite, PS_LIST_TAIL, "DBPASSWORD", PS_META_REPLACE, 842 847 NULL, dbpassword)) { 843 848 psWarning("Failed to overwrite .ipprc DBPASSWORD value"); … … 855 860 } else { 856 861 char *dbport = argv[argNum]; // The camera configuration file to read 857 if (!psMetadataAddS32(config-> site, PS_LIST_TAIL, "DBPORT", PS_META_REPLACE, NULL,862 if (!psMetadataAddS32(config->xxSite, PS_LIST_TAIL, "DBPORT", PS_META_REPLACE, NULL, 858 863 (psS32)atoi(dbport))) { 859 864 psWarning("Failed to overwrite .ipprc DBPORT value"); … … 1027 1032 if (! config->camera) { 1028 1033 bool mdok; // Metadata lookup status 1029 psMetadata *cameras = psMetadataLookupMetadata(&mdok, config-> site, "CAMERAS");1034 psMetadata *cameras = psMetadataLookupMetadata(&mdok, config->xxSystem, "CAMERAS"); 1030 1035 if (! mdok || !cameras) { 1031 1036 psError(PS_ERR_IO, true, "Unable to find CAMERAS in the configuration."); … … 1114 1119 PS_ASSERT_STRING_NON_EMPTY(cameraName, NULL); 1115 1120 1116 psMetadata *cameras = psMetadataLookupMetadata(NULL, config-> site, "CAMERAS");1121 psMetadata *cameras = psMetadataLookupMetadata(NULL, config->xxSystem, "CAMERAS"); 1117 1122 if (!cameras) { 1118 1123 psError(PS_ERR_IO, true, "Unable to find CAMERAS in the configuration."); … … 1140 1145 { 1141 1146 PS_ASSERT_PTR_NON_NULL(config, NULL); 1142 PS_ASSERT_PTR_NON_NULL(config-> site, NULL);1147 PS_ASSERT_PTR_NON_NULL(config->xxSite, NULL); 1143 1148 1144 1149 #ifndef HAVE_PSDB … … 1157 1162 1158 1163 // XXX leaky strings 1159 psString dbServer = psMetadataLookupStr(&mdStatus01, config-> site, "DBSERVER");1160 psString dbUsername = psMetadataLookupStr(&mdStatus02, config-> site, "DBUSER");1161 psString dbPassword = psMetadataLookupStr(&mdStatus03, config-> site, "DBPASSWORD");1162 psString dbName = psMetadataLookupStr(&mdStatus04, config-> site, "DBNAME");1163 psS32 dbPort = psMetadataLookupS32(&mdStatus05, config-> site, "DBPORT");1164 psString dbServer = psMetadataLookupStr(&mdStatus01, config->xxSite, "DBSERVER"); 1165 psString dbUsername = psMetadataLookupStr(&mdStatus02, config->xxSite, "DBUSER"); 1166 psString dbPassword = psMetadataLookupStr(&mdStatus03, config->xxSite, "DBPASSWORD"); 1167 psString dbName = psMetadataLookupStr(&mdStatus04, config->xxSite, "DBNAME"); 1168 psS32 dbPort = psMetadataLookupS32(&mdStatus05, config->xxSite, "DBPORT"); 1164 1169 if (!mdStatus05) { 1165 1170 dbPort = 0; … … 1352 1357 // replace path://PATH with matched datapath 1353 1358 if (!strncasecmp(filename, "path://", strlen("path://"))) { 1354 PS_ASSERT_METADATA_NON_NULL(config-> site, NULL);1359 PS_ASSERT_METADATA_NON_NULL(config->xxSite, NULL); 1355 1360 1356 1361 psString newName = psStringCopy(filename); 1357 1362 1358 1363 // filename should be of the form: path://PATH/rest/of/file 1359 // replace PATH with matching name from config-> site:DATAPATH1360 psMetadata *datapath = psMetadataLookupPtr (NULL, config-> site, "DATAPATH");1364 // replace PATH with matching name from config->xxSite:DATAPATH 1365 psMetadata *datapath = psMetadataLookupPtr (NULL, config->xxSite, "DATAPATH"); 1361 1366 if (datapath == NULL) { 1362 1367 psError(PS_ERR_UNKNOWN, true, "DATAPATH is not defined in config.site"); … … 1410 1415 // if env isn't set, check the config system 1411 1416 if (!neb_server) { 1412 neb_server = psMetadataLookupStr(&status, config-> site, "NEB_SERVER");1417 neb_server = psMetadataLookupStr(&status, config->xxSite, "NEB_SERVER"); 1413 1418 if (!status) { 1414 1419 psError(PM_ERR_CONFIG, true, "failed to lookup config value for NEB_SERVER.");
Note:
See TracChangeset
for help on using the changeset viewer.
