/* * List all hotfixes to Foundation SAS products, * and most recent hotfixes to web tier components * and Java clients. * * Note: Includes only Windows and UNIX installation defaults. * * Usage Notes: * UNIX: Assumes the program is executed under installer account (i.e., sas) * If not, you will likely need to modify the path to vpd.properties. * * History: * JUN2008 - sassym - initial coding * OCT2008 - SASHLJ & CRDEVA added hotfixes2 to incorporate non base server hot fixes and also edited the format code to include more descriptive names */ %macro listFix; %local dateOpt; %let dateOpt = %sysfunc( getoption( date ) ); options nodate pageno=1; /* check for Windows */ %if &sysscp = WIN %then %do; filename vpd "%sysget(WINDIR)\vpd.properties"; filename fxs pipe "dir ""%sysget(SASROOT)\core\sasinst\hotfix\*.aud"""; filename fxs2 pipe "dir ""%sysget(SASROOT)\core\sasinst\hotfix\"""; %end; /* otherwise, assume UNIX */ %else %do; filename vpd "~/vpd.properties"; filename fxs "!SASROOT/install/admin/history.hotfix"; %end; proc format; value $sasprod 'BA','BB','BC','BD' = 'Base SAS' 'AD' = 'SAS/ACC to ADABAS' 'DD' = 'SAS/ACC to CA-Datacom/DB' 'D2' = 'SAS/ACC to DB2' 'SQ' = 'SAS/ACC to DB2 for VM' 'ID' = 'SAS/ACC to CA-IDMS' 'MS' = 'SAS/ACC to IMS-DL/I' 'IF' = 'SAS/ACC to Informix' 'IG' = 'SAS/ACC to CA-OpenIngres' 'OD' = 'SAS/ACC to ODBC Server' 'OL' = 'SAS/ACC to OLE DB' 'OC' = 'SAS/ACC to Oracle' 'PF' = 'SAS/ACC to PC File Formats' 'PE' = 'SAS/ACC to PeopleSoft' 'R2' = 'SAS/ACC to R/3' 'BW' = 'SAS/ACC to SAP BW' 'SB' = 'SAS/ACC to Sybase' 'S2' = 'SAS/ACC to System 2000' 'TE' = 'SAS/ACC to Teradata' 'AS' = 'SAS/ASSIST' 'CT' = 'SAS/CONNECT' 'ES' = 'SAS/EIS' 'DT' = 'Enterprise Miner' 'ET' = 'SAS/ETS' 'FS' = 'SAS/FSP' 'GN' = 'SAS/Genetics' 'GR' = 'SAS/GRAPH' 'ML' = 'SAS/IML' 'IH' = 'Integration Technologies' 'WB' = 'SAS/IntrNet' 'IS' = 'IT Service Vision' 'MX' = 'SAS/MDDB Server' 'OR' = 'SAS/OR' 'QC' = 'SAS/QC' 'RI' = 'Risk Dimensions' 'SH' = 'SAS/SHARE' 'ST' = 'SAS/STAT' 'TM', 'tm' = 'SAS Text Miner' 'WH' = 'SAS Warehouse Administrator' 'WD' = 'WebHound' 'WW' = 'Jscore' 'HP' = 'SAS HPF' 'QL' = 'SAS Data Quality Server' 'YQ' = 'SAS/ACC to MySQL' 'SD' = 'SAS/SECURE' 'HO' = 'Service Pack' 'AM' = 'SAS Anti-Money Laundering' 'WN' = 'SAS Web Analytics' 'mm','MM' = 'SAS Marketing Automation' 'cg','CG' = 'Campaign Management Component' 'sp','SP' = 'Strategic Performance Management' 'fi','FI' = 'Financial Managment Solution' 'apcore' = 'Analytics Platform' 'dmineclt' = 'Enterprise Miner client' 'citatnweb' = 'SAS Web Report Studio' 'databldr' = 'DI Studio' 'jportal' = 'Information Delivery Portal' 'jps' = 'Foundation Services' 'mapcntr' = 'Information Map Studio' 'qrservices' = 'Query and Reporting Services' 'smc' = 'SAS Management Console' 'webinfrakit' = 'SAS Web Infrastructure Kit' 'webolapvr' = 'SAS Web OLAP Viewer' 'webrptvr' = 'SAS Web Report Viewer' 'mitibridge' = 'SAS Metadata Bridge' 'emaauxdataio','emacore','emalauncher','emasmc','emawebnport' = 'SAS Digital Marketing' 'forcaststdo' = 'Forecast Studio' 'forcastsrvr' = 'Forecast Server' 'DA' = 'Enterprise Miner Server' 'mmapi' = 'Model Manager Mid Tier' 'mmgui' = 'Model Manager Client' 'tmclient' = 'Text Miner Client' 'cr', 'CR' = 'Credit Scoring' ; run; /* * Read fixes recorded in vpd.properties */ data webfixes; length product fix $20; infile vpd dlm=' |' lrecl=400; input @"Hotfix " fix : $20.; if not missing( fix ); fix = lowcase( fix ); product = compress( fix, '0123456789' ); retain date .; run; /* * Read fixes recorded in hotfix directory */ data hotfixes; length product fix $20 date 8; %if &sysscp = WIN %then %do; infile fxs truncover; input @1 date ?? mmddyy10. @; if not missing( date ); input junk $ junk $ junk $ fix $; product = upcase( substr( fix, 3, 2 ) ); if index(fix, '.') > 0 then delete; %end; %else %do; infile fxs dlm=' '; input junk $ @; if junk = 'ADD'; input junk $ product $ junk $ junk $ fix $ @ 'timestamp:' dow :$3. mon :$3. day $ junk $ year ?? :4. @; if missing(year) then input year; date = input( cats( day, mon, year ), date9. ); drop dow mon day year; %end; format product $sasprod. date date9.; drop junk; run; data hotfixes2; length product $20 fix $20 date 8; %if &sysscp = WIN %then %do; infile fxs2 truncover; input @1 date ?? mmddyy10. @; if not missing( date ); input junk $ junk $ junk $ fix $; product = upcase( substr( fix, 3, 2 ) ); if product=' ' then delete; if index(fix, '.') > 0 then delete; %end; %else %do; infile fxs dlm=' '; input junk $ @; if junk = 'ADD'; input junk $ product $ junk $ junk $ fix $ @ 'timestamp:' dow :$3. mon :$3. day $ junk $ year ?? :4. @; if missing(year) then input year; date = input( cats( day, mon, year ), date9. ); drop dow mon day year; %end; format product $sasprod. date date9.; drop junk; run; /* Combine the two sources */ proc append base=hotfixes data=webFixes; run; proc append base=hotfixes data=hotfixes2; run; /* Get rid of duplicate entries */ proc sort data=hotfixes nodupkey; by product fix; run; /* List hotfixes */ title 'Hotfixes by Product'; proc report data=hotfixes nowd; columns product fix date; define product / group order=formatted 'Product'; define fix / order 'Hotfix'; define date / order missing 'Date' ; break after product / skip; run; filename vpd clear; filename fxs clear; filename fxs2 clear; title; option &dateOpt; %mend listFix; %listFix