FOSSology  4.6.0-rc1
Open Source License Compliance by Open Source Software
parse.c
Go to the documentation of this file.
1 /*
2  SPDX-FileCopyrightText: © 2006-2015 Hewlett-Packard Development Company, L.P.
3  SPDX-FileCopyrightText: © 2017-2019 Bittium Wireless Ltd.
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 /* Equivalent to version 1.83 of Core Nomos code. */
8 #include <ctype.h>
9 
10 #include "nomos.h"
11 
12 #include "parse.h"
13 #include "list.h"
14 #include "util.h"
15 #include "nomos_regex.h"
16 #include "nomos_utils.h"
17 #include <_autodefs.h>
18 
19 /* DEBUG
20 #define DOCTOR_DEBUG 1
21 #define PROC_TRACE 1
22  DEBUG */
23 
40 #define _mGPL 0
41 #define _mLGPL 1
42 #define _mGFDL 2
43 #define _mQPL 3
44 #define _mPYTHON 4
45 #define _mPYTH_TEXT 5
46 #define _mAPACHE 6
47 #define _mHP 7
48 #define _mPHP 8
49 #define _mMIT 9
50 #define _mXOPEN 10
51 #define _mREDHAT 11
52 #define _mISC 12
53 #define _mCMU 13
54 #define _mOSF 14
55 #define _mSUN 15
56 #define _mALADDIN 16
57 #define _mCUPS 17
58 #define _fOPENLDAP 18
59 #define _fBSD 19
60 #define _fGPL 20
61 #define _mCDDL 21
62 #define _mLIBRE 22
63 #define _mGSOAP 23
64 #define _mMPL 24
65 #define _fATTRIB 25
66 #define _fREAL 26
67 #define _fIETF 27
68 #define _fDOC 28
69 #define _fMSCORP 29
70 #define _fW3C 30
71 #define _mAPTANA 31
72 #define _tOPENLDAP 32
73 #define _mNTP 33 // To avoid W3C-style detection
74 #define _fIP 34
75 #define _fANTLR 35
76 #define _fCCBY 36
77 #define _fZPL 37
78 #define _fCLA 38
79 #define _fODBL 39
80 #define _fPDDL 40
81 #define _fRUBY 41
82 #define _fSAX 42
83 #define _fAPL 43
84 #define _fARTISTIC 44
85 #define _fCITRIX 45
86 #define _fPURDUE 46
87 #define _fUNICODE 47
88 #define _fOFL 48
89 #define _mAPACHE10 49
90 #define _mAPACHE11 50
91 #define _mWORDNET 51
92 #define _fNCSA 52
93 #define _fTCL 53
94 #define _fIJG 54
95 #define _msize _fIJG+1
97 
101 static struct {
102  char *base;
103  int sso;
104  int seo;
105  int index;
107 
108 
109 #ifdef PRECHECK
110 extern void preloadResults(char *filetext, char *ltsr);
111 #endif /* PRECHECK */
112 
118 int findPhrase(int, char *,int, int, int, int);
119 int famOPENLDAP(char *, int ,int, int);
120 int checkUnclassified(char *, int, int, int, int, int);
121 int checkPublicDomain(char *, int, int, int, int, int);
122 static int dbgIdxGrep(int, char *, int);
123 #ifdef LTSR_DEBUG
124 void showLTCache(char *);
125 #endif /* LTSR_DEBUG */
126 void checkCornerCases(char *, int, int, int, int, int, int, int);
127 void checkFileReferences(char *, int, int, int, int, int);
128 void addRef(char *, int);
129 #ifdef DOCTOR_DEBUG
130 void dumpMatch(char *, char *);
131 #endif /* DOCTOR_DEBUG */
132 void locateRegex(char *, item_t *, int, int, int, int);
133 void saveRegexLocation(int, int, int, int);
134 void saveUnclBufLocation(int);
135 void saveLicenseParagraph(char *, int , int , int);
136 char *cplVersion(char *, int, int, int);
137 static char *gplVersion(char *, int, int, int);
138 char *lgplVersion(char *, int, int, int);
139 char *agplVersion(char *, int, int, int);
140 char *gfdlVersion(char *, int, int, int);
141 char *lpplVersion(char *, int, int, int);
142 char *mplNplVersion(char *, int, int, int);
143 char *pythonVersion(char *, int, int, int);
144 static char *realVersion(char *, int, int, int, int);
145 static char *sisslVersion(char *, int, int, int);
146 char *aslVersion(char *, int, int, int);
147 char *cddlVersion(char *, int, int, int);
148 char *ccVersion(char *, int, int, int);
149 char *oslVersion(char *, int, int, int);
150 char *aflVersion(char *, int, int, int);
151 static int match3(int, char *, int, int, int, int);
152 void spdxReference(char *, int, int, int);
153 void copyleftExceptions(char *, int, int, int);
155 
164 static char licStr[myBUFSIZ];
165 
166 static char ltsr[NFOOTPRINTS];
168 static char name[256];
169 static char lmem[_msize];
170 static list_t searchList;
171 static list_t whereList;
172 static list_t whCacheList;
173 static int refOffset;
174 static int maxInterest;
175 static int pd;
177 static int crCheck;
178 static int checknw;
179 static int lDebug = 0;
180 static int lDiags = 0;
182 
188 #define PARSE_ARGS filetext, size, isML, isPS
189 #define LVAL(x) (ltsr[x] & LTSR_RMASK)
190 #define SEEN(x) (ltsr[x] & LTSR_SMASK)
191 #define INFILE(x) fileHasPatt(x, PARSE_ARGS, 0)
192 #define NOT_INFILE(x) !( fileHasPatt(x, PARSE_ARGS, 0) && clearLastElementOfLicenceBuffer() )
193 #define RM_INFILE(x) fileHasPatt(x, PARSE_ARGS, 1)
194 #define GPL_INFILE(x) fileHasPatt(x, PARSE_ARGS, 2)
195 #define PERL_INFILE(x) fileHasPatt(x, PARSE_ARGS, 3)
196 #define NY_INFILE(x) fileHasPatt(x, PARSE_ARGS, 4)
197 #define X_INFILE(x, y) fileHasPatt(x, PARSE_ARGS, y)
198 #define DEBUG_INFILE(x) printf(" Regex[%d] = \"%s\"\nINFILE(%d) = %d\n", x, _REGEX(x), x, INFILE(x));
199 #define HASREGEX(x, cp) idxGrep(x, cp, REG_ICASE|REG_EXTENDED)
200 #define HASREGEX_RI(x, cp) idxGrep_recordIndex(x, cp, REG_ICASE|REG_EXTENDED)
201 #define HASTEXT(x, fl) idxGrep_recordIndex(x, filetext, REG_ICASE|fl)
202 #define URL_INFILE(x) (INFILE(x) || fileHasPatt(x, PARSE_ARGS, -1))
203 #define CANSKIP(i,x,y,z) ((i >= y) && (i <= z) && !(kwbm & (1 << (x - _KW_first))))
204 #define HASKW(x, y) (x & (1 << (y - _KW_first)))
205 #define TRYGROUP(x) x(PARSE_ARGS)
206 #define LOWINTEREST(x) addRef(x, IL_LOW)
207 #define MEDINTEREST(x) addRef(x, IL_MED)
208 //#define INTERESTING(x) printf("INTERESTING: %s, %d, %s\n", __FILE__, __LINE__, x);addRef(x, IL_HIGH)
209 #define INTERESTING(x) addRef(x, IL_HIGH)
210 #define ASLVERS() aslVersion(PARSE_ARGS)
211 #define CCVERS() ccVersion(PARSE_ARGS)
212 #define AFLVERS() aflVersion(PARSE_ARGS)
213 #define OSLVERS() oslVersion(PARSE_ARGS)
214 #define CPLVERS() cplVersion(PARSE_ARGS)
215 #define GPLVERS() gplVersion(PARSE_ARGS)
216 #define LGPLVERS() lgplVersion(PARSE_ARGS)
217 #define AGPLVERS() agplVersion(PARSE_ARGS)
218 #define GFDLVERS() gfdlVersion(PARSE_ARGS)
219 #define CDDLVERS() cddlVersion(PARSE_ARGS)
220 #define LPPLVERS() lpplVersion(PARSE_ARGS)
221 #define MPLVERS() mplNplVersion(PARSE_ARGS)
222 #define PYTHVERS() pythonVersion(PARSE_ARGS)
223 #define SISSLVERS() sisslVersion(PARSE_ARGS)
224 #define REALVERS(x) realVersion(PARSE_ARGS, x)
225 #define PR_REGEX(x) printf("check %d = %s\n", x, _REGEX(x));
226 #define mCR_CMU() (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2))
227 #define mCR_EDIN() (INFILE(_CR_EDINBURGH_1) || INFILE(_CR_EDINBURGH_2))
228 #define mCR_FSF() (INFILE(_CR_FSF1) || INFILE(_CR_FSF2))
229 #define mCR_HP() (INFILE(_CR_HP_1)|| INFILE(_CR_HP_2) || INFILE(_CR_DEC) || INFILE(_CR_EDS))
230 #define mCR_IETF() (INFILE(_CR_IETF_1) || INFILE(_CR_IETF_2))
231 #define mCR_MIT() (INFILE(_CR_MIT1) || INFILE(_CR_MIT2))
232 #define mCR_X11() (INFILE(_CR_X11) || INFILE(_CR_XFREE86))
233 #define mCR_IPTC() (INFILE(_CR_IPTC1) || INFILE(_CR_IPTC2))
234 #define SPDXREF() spdxReference(PARSE_ARGS)
235 #define EXCEPTIONS() copyleftExceptions(PARSE_ARGS)
237 
248 static int fileHasPatt(int licTextIdx, char *filetext, int size,
249  int isML, int isPS, int qType)
250 {
251  int ret = 0;
252  int show = 0;
253  item_t *ip;
254 
255 #ifdef PROC_TRACE
256  traceFunc("== fileHasPatt(size=%d, isML=%d, isPS=%d, qType=%d, idx=%d)\n",
257  size, isML, isPS, qType, licTextIdx);
258 
259 #endif /* PROC_TRACE */
260 
261  /*
262  * If qType is negative, then we should call idxGrep to look at the
263  * raw text of the file; non-negative value means look in the doctored
264  * text buffers...
265  */
266  if ((qType >= 0) && (qType & FL_SHOWMATCH)) {
267  qType &= ~FL_SHOWMATCH;
268  show = FL_SHOWMATCH;
269  }
270  if (qType < 0) {
271  ret = idxGrep_recordPosition(licTextIdx, filetext, REG_ICASE | REG_EXTENDED | show);
272  if (lDiags && ret) {
273 #ifdef DOCTOR_DEBUG
274  dumpMatch(filetext, "RAW-Text");
275 #endif /* DEBUG */
276  printRegexMatch(licTextIdx, NO);
277  saveRegexLocation(licTextIdx, cur.regm.rm_so,
278  cur.regm.rm_eo - cur.regm.rm_so, YES);
279 #ifdef DEBUG
280  printf("WINDOW-RAW: offset %d, length %d\n",
281  cur.regm.rm_so, cur.regm.rm_eo - cur.regm.rm_so);
282 #endif /* DEBUG */
283  }
284  return(ret);
285  }
286  if (SEEN(licTextIdx)) {
287 #ifdef LTSR_DEBUG
288  printf("Cache hit: ltsr[%d] = 0x%x\n", licTextIdx, ltsr[licTextIdx]);
289 #endif /* LTSR_DEBUG */
290  if (lDiags && (ltsr[licTextIdx] & LTSR_YES) == LTSR_YES) {
291  printRegexMatch(licTextIdx, YES);
292  (void) sprintf(name, "reg%04d", licTextIdx);
293  ip = listGetItem(&whCacheList, name);
294  if (ip->bIndex != licTextIdx) {
295  listDump(&whCacheList, NO);
296  LOG_FATAL("Offset-cache (\"%s\") == %d, not %d!", name, ip->bIndex, licTextIdx)
297  Bail(-__LINE__);
298  }
299  saveRegexLocation(licTextIdx, ip->bStart, ip->bLen, NO);
300  }
301  return(ltsr[licTextIdx] & LTSR_RMASK);
302  }
303  return(findPhrase(licTextIdx, PARSE_ARGS, qType));
304 }
305 
316 static int dbgIdxGrep(int licTextIdx, char *buf, int show)
317 {
318  int ret;
319  int flags = REG_ICASE|REG_EXTENDED;
320 
321  if (SEEN(licTextIdx)) {
322  return(ltsr[licTextIdx] & LTSR_RMASK);
323  }
324 
325  if (show) {
326  flags |= FL_SHOWMATCH;
327  }
328  ret = idxGrep(licTextIdx, buf, flags);
329  if (lDiags && ret) {
330  printRegexMatch(licTextIdx, NO);
331  saveRegexLocation(licTextIdx, cur.regm.rm_so,
332  cur.regm.rm_eo - cur.regm.rm_so, YES);
333  }
334  ltsr[licTextIdx] |= ret;
335  return ret;
336 }
337 
359 char *parseLicenses(char *filetext, int size, scanres_t *scp,
360  int isML, int isPS)
361 {
362  static int first = 1;
363  char *cp;
364  int i;
365  int j;
366  int nw = 0;
367  int score = scp->score;
368  int kwbm = scp->kwbm;
369 #ifdef PRECHECK
370  extern void preloadResults(char *, char *);
371 #endif /* PRECHECK */
372 
373 #if defined(PROC_TRACE) || defined(DOCTOR_DEBUG)
374  traceFunc("== parseLicenses(%p, %d, [%d, 0x%x], %d, %d)\n",
375  filetext, size, score, kwbm, isML, isPS );
376 #endif /* PROC_TRACE || DOCTOR_DEBUG */
377 
378  if (size == 0) {
379  LOWINTEREST("Empty-file-no-data!");
380  return(licStr+1);
381  }
382 
383  if (first) {
384  if (optionIsSet(OPTS_DEBUG)) {
385  lDebug = 1;
386  lDiags = 1;
387  }
388  listInit(&searchList, 0, "pattern-search list");
389  listInit(&whereList, 0, "regex-match locations list");
390  listInit(&whCacheList, 0, "regex-cache-match list");
391  first = 0;
392  }
393  crCheck = 0;
394  kludge.base = NULL_STR;
395  /*
396  * Interestingly enough, the headers for Nomos-generated file (e.g., the
397  * page containing the keywords found, file attributes and file text, etc.)
398  * contain enough data to confuse the parser in multiple ways... in the
399  * rare event we encounter a data file we generated, skip the header.
400  *****
401  * AND, not all nomos-created files have the same header(s).
402  */
403  pd = -1; /* unchecked */
404  cp = filetext;
405  maxInterest = IL_INIT;
406  cur.licPara = NULL_STR; /* unclassified license data */
407  gl.flags &= ~FL_FRAGMENT;
408 #ifdef FLAG_NO_COPYRIGHT
409  gl.flags &= ~FL_NOCOPYRIGHT;
410 #endif /* FLAG_NO_COPYRIGHT */
411  if (scp->dataOffset && lDiags) {
412  LOG_NOTICE("%s-generated link, ignore header (%d bytes)!",
413  gl.progName, scp->dataOffset);
414  }
415 
416  /*
417  * It's been observed over time that the file-magic() stuff doesn't always
418  * identify everything correctly. One case in particular is PostScript files
419  * when the "%%PS" directive isn't the first line in a file... but the rest
420  * of the data really IS PostScript
421  */
422  if (!isPS && (strncasecmp(filetext, "%%page:", 7) == 0 || strncasecmp(filetext, "{\\rtf", 5) == 0)) {
423 #if defined(DEBUG) || defined(DOCTOR_DEBUG)
424  printf("File is really postscript, %s filetext !\n", filetext);
425 #endif /* DEBUG || DOCTOR_DEBUG */
426  isPS = 1;
427  }
428 
429  *licStr = NULL_CHAR;
430  refOffset = 0;
431  (void) memset(ltsr, 0, sizeof(ltsr));
432  (void) memset(lmem, 0, sizeof(lmem));
433 #if defined(DEBUG) && defined(LTSR_DEBUG)
434  showLTCache("LTSR-results START:");
435 #endif /* DEBUG && LTSR_DEBUG */
436 #ifdef PRECHECK
437  preloadResults(/*PARSE_ARGS*/filetext, ltsr);
438 #endif /* PRECHECK */
439 #ifdef MEMSTATS
440  memStats("parseLicenses: BOP");
441 #endif /* MEMSTATS */
442  lmem[_mPYTH_TEXT] = HASTEXT(_TEXT_PYTHON, 0);
443  lmem[_tOPENLDAP] = HASTEXT(_TEXT_OPENLDAP, 0);
444  (void) INFILE(_TEXT_GNU_LIC_INFO);
445 #ifdef LTSR_DEBUG
446  showLTCache("LTSR-results INIT-SCAN:");
447 #endif /* LTSR_DEBUG */
448  /*
449  * MySQL.FLOSS exception
450  */
451  if (INFILE(_LT_MYSQL_EXCEPT) || INFILE(_PHR_FREE_LIBRE)) {
452  if (INFILE(_TITLE_ALFRESCO)) {
453  INTERESTING("Alfresco-FLOSS");
454  }
455  else if (HASTEXT(_TEXT_ALFRESCO, 0)) {
456  INTERESTING("Alfresco");
457  }
458  else if (INFILE(_CR_MYSQL) || INFILE(_TITLE_mysql_floss_exception)) {
459  if (INFILE(_TITLE_MYSQL_V03)) {
460  INTERESTING("MySQL-0.3");
461  }
462  else {
463  INTERESTING("mysql-floss-exception");
464  }
465  }
466  else {
467  INTERESTING("MySQL-style");
468  }
469  lmem[_mLIBRE] = 1;
470  }
471  /*
472  * Some RealNetworks licenses included a list of "compatible" licenses that
473  * can confuse the license-detection algorithms within. Look for these early
474  * in the process, and ignore the known (false) matches when we detect the
475  * RPSL/RCSL licenses.
476  */
477  if (HASTEXT(_TEXT_REALNET, REG_EXTENDED)) {
478  /*
479  * List of other licenses should be excluded only if full license text is found
480  */
481  if (INFILE(_LT_RPSL_COMPATIBLE)) {
482  lmem[_fREAL] = 1;
483  }
484  if (INFILE(_LT_REAL_RPSL)) {
485  cp = REALVERS(_TITLE_RPSL);
486  INTERESTING(lDebug ? "RPSL" : cp);
487  }
488  else if (INFILE(_LT_REAL_RPSLref)) {
489  cp = REALVERS(_TITLE_RPSL);
490  INTERESTING(lDebug ? "Real-RPSL(ref)" : cp);
491  }
492  if (INFILE(_LT_REAL_RCSL)) {
493  cp = REALVERS(_TITLE_RCSL);
494  INTERESTING(lDebug ? "RCSL" : cp);
495  }
496  else if (INFILE(_LT_REAL_RCSLref)) {
497  cp = REALVERS(_TITLE_RCSL);
498  INTERESTING(lDebug ? "Real-RCSL(ref)" : cp);
499  }
500  if (INFILE(_TITLE_REAL_EULA)) {
501  INTERESTING("RealNetworks-EULA");
502  }
503  else if (INFILE(_LT_HELIX_TITLE)) {
504  INTERESTING("Helix.RealNetworks-EULA");
505  }
506  }
508  /*
509  * Zope - this license is explicitly listed (by title) in several other
510  * licenses...
511  */
512  if (!lmem[_mLIBRE] && !lmem[_fREAL] && INFILE(_TITLE_ZOPE)) {
513  if (INFILE(_TITLE_ZOPE_V21)) {
514  INTERESTING("ZPL-2.1");
515  lmem[_fZPL] = 1;
516  }
517  else if (INFILE(_TITLE_ZOPE_V20)) {
518  INTERESTING("ZPL-2.0");
519  lmem[_fZPL] = 1;
520  }
521  else if (INFILE(_TITLE_ZOPE_V10)) {
522  INTERESTING("ZPL-1.0");
523  lmem[_fZPL] = 1;
524  }
525  else if (INFILE(_TITLE_ZOPE_V11)) {
526  INTERESTING("ZPL-1.1");
527  lmem[_fZPL] = 1;
528  }
529  else if (INFILE(_SPDX_ZPL_11)) {
530  INTERESTING("ZPL-1.1");
531  lmem[_fZPL] = 1;
532  }
533  else if (INFILE(_SPDX_ZPL_20)) {
534  INTERESTING("ZPL-2.0");
535  lmem[_fZPL] = 1;
536  }
537  else if (INFILE(_SPDX_ZPL_21)) {
538  INTERESTING("ZPL-2.1");
539  lmem[_fZPL] = 1;
540  }
541  else if (INFILE(_TITLE_ZIMBRA_13)) {
542  INTERESTING("Zimbra-1.3");
543  }
544  else if (INFILE(_TITLE_ZIMBRA_12)) {
545  INTERESTING("Zimbra-1.2");
546  }
547  else {
548  INTERESTING(lDebug ? "Zope(ref)" : "ZPL");
549  lmem[_fZPL] = 1;
550  }
551  }
553  /*
554  * Check Apache licenses before BSD
555  */
556  if (HASTEXT(_PHR_Apache_ref0, REG_EXTENDED) || INFILE(_PHR_Apache_ref7) || INFILE(_TITLE_Apache)) {
557  cp = ASLVERS();
558  INTERESTING(cp);
559  }
561  /*
562  * BSD and all the variant 'flavors'. BSD licenses are kind of like
563  * the cooking concept of 'the mother sauces' -- MANY things are derived
564  * from the wordings of these licenses. There are still many more, for
565  * certain, but LOTS of licenses are based on ~10 originally-BSD-phrases.
566  */
567  if (INFILE(_LT_BSD_1)) {
568  if (INFILE(_TITLE_PHP301)) {
569  INTERESTING(lDebug ? "PHP(v3.01#1)" : "PHP-3.01");
570  lmem[_mPHP] = 1;
571  }
572  else if (INFILE(_TITLE_PHP30)) {
573  INTERESTING(lDebug ? "PHP(v3.0#1)" : "PHP-3.0");
574  lmem[_mPHP] = 1;
575  }
576  else if (INFILE(_TITLE_PHP202)) {
577  INTERESTING(lDebug ? "PHP(v2.02#1)" : "PHP-2.02");
578  lmem[_mPHP] = 1;
579  }
580  else if (INFILE(_CR_VOVIDA) || INFILE(_TITLE_VOVIDA)) {
581  INTERESTING("VSL-1.0");
582  lmem[_fBSD] = 1;
583  }
584  else if (INFILE(_CR_NAUMEN) || INFILE(_TITLE_NAUMEN)) {
585  INTERESTING("Naumen");
586  }
587  else if (INFILE(_CR_ENTESSA) || INFILE(_TITLE_ENTESSA)) {
588  INTERESTING("Entessa");
589  }
590  else if (INFILE(_LT_ATTRIB) || INFILE(_TITLE_ATTRIBUTION)) {
591  INTERESTING("AAL");
592  lmem[_fATTRIB] = 1;
593  }
594  else if (INFILE(_CR_ZOPE)) {
595  INTERESTING(lDebug ? "Zope(bsd)" : "ZPL");
596  }
597  else if (INFILE(_LT_Oracle_Berkeley_DB)) {
598  INTERESTING("Oracle-Berkeley-DB");
599  }
600  else if (INFILE(_CR_SLEEPYCAT) || INFILE(_LT_SLEEPYCAT_1)) {
601  MEDINTEREST(lDebug ? "Sleepycat(1)" : "Sleepycat");
602  }
603  else if (INFILE(_TITLE_ZEND_V20)) {
604  INTERESTING("Zend-2.0");
605  }
606  else if (!lmem[_fOPENLDAP] && !TRYGROUP(famOPENLDAP)) {
607  if (HASTEXT(_LT_OPENSSLref5, REG_EXTENDED)) {
608  INTERESTING(lDebug ? "OpenSSL(ref)" : "OpenSSL");
609  }
610  else if (INFILE(_LT_BSD_CLAUSE_0) && INFILE(_LT_BSD_CLAUSE_1) && INFILE(_LT_BSD_CLAUSE_2)) {
611  if (INFILE(_LT_BSD_CLAUSE_3) && (INFILE(_LT_BSD_CLAUSE_4) || INFILE(_LT_BSD_CLAUSE_4_LONG)) && INFILE(_LT_UC)) {
612  INTERESTING("BSD-4-Clause-UC");
613  }
614  else if (INFILE(_LT_BSD_CLAUSE_3) && (INFILE(_LT_BSD_CLAUSE_4) || INFILE(_LT_BSD_CLAUSE_4_LONG))) {
615  INTERESTING("BSD-4-Clause");
616  }
617  else if (INFILE(_LT_BSD_CLAUSE_4) && INFILE(_LT_BSD_CLAUSE_CLEAR)) {
618  INTERESTING("BSD-3-Clause-Clear");
619  }
620  else if (INFILE(_LT_BSD_CLAUSE_4) && INFILE(_LT_BSD_CLAUSE_OPEN_MPI)) {
621  INTERESTING("BSD-3-Clause-Open-MPI");
622  }
623  else if (INFILE(_LT_BSD_CLAUSE_4) && HASTEXT(_KW_severability, REG_EXTENDED)) {
624  INTERESTING("BSD-3-Clause-Severability");
625  }
626  else if (INFILE(_LT_XML_DB_V10)) {
627  INTERESTING("XMLDB-1.0");
628  }
629  else if (INFILE(_LT_BSD_CLAUSE_4) && INFILE(_LT_ANT_BSD_RESTRICTION)) {
630  INTERESTING("ANT+SharedSource");
631  }
632  else if (!lmem[_mAPACHE11] && INFILE(_LT_Apache_11_CLAUSE_3) && INFILE(_LT_Apache_11_CLAUSE_4) && INFILE(_LT_Apache_11_CLAUSE_5)) {
633  INTERESTING(lDebug ? "BSD(Apache-1.1)" : "Apache-1.1-style");
634  }
635  else if(HASTEXT(_LT_Sendmail_823_title, 0)) {
636  INTERESTING("Sendmail-8.23");
637  }
638  else if (!lmem[_mAPACHE10] && !lmem[_mAPACHE11] && INFILE(_LT_BSD_CLAUSE_ATTRIBUTION)) {
639  INTERESTING("BSD-3-Clause-Attribution");
640  }
641  else if (!lmem[_mAPACHE10] && !lmem[_mAPACHE11] && INFILE(_LT_BSD_CLAUSE_4)) {
642  if (INFILE(_LT_DARPA_COUGAAR_2)) {
643  INTERESTING("DARPA-Cougaar");
644  }
645  else {
646  INTERESTING("BSD-3-Clause");
647  }
648  }
649  else if (INFILE(_LT_SSLEAY)) {
650  INTERESTING("SSLeay");
651  }
652  else if (INFILE(_LT_TMATE)) {
653  INTERESTING("TMate");
654  }
655  else if (INFILE(_LT_MUP)) {
656  INTERESTING("Mup");
657  }
658  else if (INFILE(_LT_FREE_BSD)) {
659  INTERESTING("BSD-2-Clause-FreeBSD");
660  }
661  else if (INFILE(_LT_BSD_CLAUSE_PATENT)) {
662  INTERESTING("BSD-2-Clause-Patent");
663  }
664  else if (INFILE(_CR_NETBSD)) {
665  INTERESTING("BSD-2-Clause-NetBSD");
666  }
667  else if (INFILE(_LT_MIT_0)) {
668  lmem[_mMIT] = 1;
669  INTERESTING("Linux-OpenIB");
670  }
671  else if (!lmem[_mAPACHE10] && !lmem[_mAPACHE11]) {
672  INTERESTING("BSD-2-Clause");
673  }
674  }
675  else if (INFILE(_CR_CRYPTOGAMS)) {
676  INTERESTING("Cryptogams");
677  }
678  else if (INFILE(_LT_BSD_SHORTENED_CLAUSE_0) && INFILE(_LT_BSD_SHORTENED_CLAUSE_1) && INFILE(_LT_BSD_SHORTENED_CLAUSE_2) && INFILE(_LT_BSD_CLAUSE_3)) {
679  INTERESTING("BSD-4-Clause-Shortened");
680  }
681  else if (INFILE(_CR_BSDCAL)) {
682  INTERESTING(lDebug ? "BSD(1)" : "BSD");
683  }
684  else if (HASTEXT(_TEXT_ALTERED_SOURCE, REG_EXTENDED) && HASTEXT(_TEXT_ORIGIN, 0)) {
685  if (INFILE(_PHR_BZIP2_3)) {
686  INTERESTING("bzip2-1.0.5");
687  }
688  else if (HASTEXT(_PHR_BZIP2_4, REG_EXTENDED)) {
689  INTERESTING("bzip2-1.0.6");
690  }
691  else {
692  INTERESTING("bzip2");
693  }
694  }
695  else if (mCR_CMU()) {
696  INTERESTING(lDebug ? "CMU(BSD-ish)" : "CMU");
697  }
698  else if (INFILE(_LT_MTLL)) {
699  INTERESTING("MTLL");
700  }
701  else if (INFILE(_LT_BSD_CLAUSE_1_DISCLAIMER)) {
702  INTERESTING("BSD-1-Clause");
703  }
704  else if (INFILE(_LT_Spencer_99) && INFILE(_CR_Spencer)) {
705  INTERESTING("Spencer-99");
706  }
707  else if (!lmem[_fZPL]) {
708  INTERESTING(lDebug ? "BSD-style(1)" : "BSD-style");
709  }
710  }
711  lmem[_fBSD] = 1;
712  }
713  else if (INFILE(_LT_BSD_CLEAR_CLAUSE_0) && INFILE(_LT_BSD_CLAUSE_1) && INFILE(_LT_BSD_CLAUSE_2)) {
714  INTERESTING("BSD-3-Clause-Clear");
715  }
716  else if (INFILE(_PHR_Linux_OpenIB)) {
717  INTERESTING("Linux-OpenIB");
718  }
719  else if (INFILE(_LT_BSD_2)) {
720  /*
721  * Python, OSF, SecretLabs, some universities, some vendors, etc., have
722  * variants here.
723  */
724  if (INFILE(_CR_PYTHON) || INFILE(_TITLE_PYTHON)) {
725  cp = PYTHVERS();
726  INTERESTING(lDebug ? "Python(3)" : cp);
727  lmem[_mPYTHON] = 1;
728  }
729  else if (INFILE(_CR_OSF)) {
730  INTERESTING(lDebug ? "OSF(1)" : "OSF");
731  lmem[_mOSF] = 1;
732  }
733  else if (INFILE(_CR_UI)) {
734  INTERESTING(lDebug ? "UI(1)" : "Unix-Intl");
735  }
736  else if (INFILE(_CR_XOPEN)) {
737  INTERESTING(lDebug ? "XOpen(1)" : "X/Open");
738  lmem[_mXOPEN] = 1;
739  }
740  else if (INFILE(_PHR_HISTORICAL)) {
741  INTERESTING("HPND");
742  }
743  else if (INFILE(_LT_CMU_7)) {
744  if (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2) || INFILE(_CR_BSDCAL)) {
745  INTERESTING("MIT-CMU");
746  }
747  else {
748  INTERESTING("MIT-CMU-style");
749  }
750  lmem[_mCMU] = 1;
751  }
752  else if (INFILE(_CR_BSDCAL)) {
753  INTERESTING(lDebug ? "BSD(2)" : "BSD");
754  }
755  else if (INFILE(_LT_NTP)) {
756  INTERESTING("NTP");
757  }
758  else if (INFILE(_LT_WORDNET))
759  {
760  INTERESTING("WordNet-3.0");
761  lmem[_mMIT] = 1;
762  }
763  else if (INFILE(_LT_HPND_1) && INFILE(_LT_HPND_2)) {
764  INTERESTING("HPND");
765  lmem[_mMIT] = 1;
766  }
767  else if (INFILE(_LT_NOT_ADVERTISING)) {
768  INTERESTING(lDebug ? "BSD-style(2)" : "BSD-style");
769  }
770  else if (INFILE(_PHR_NO_WARRANTY_12)) {
771  INTERESTING(lDebug ? "ISC(BSD-style)" : "ISC-style");
772  }
773  else {
774  INTERESTING(lDebug ? "BSD-style(2)-MIT" : "MIT-style");
775  }
776  lmem[_fBSD] = 1;
777  }
778  else if (INFILE(_LT_BSD_3) && NOT_INFILE(_TITLE_OPENLDAP)) {
779  if (INFILE(_LT_AMPAS)) {
780  INTERESTING("AMPAS");
781  }
782  else if (INFILE(_CR_BSDCAL)) {
783  INTERESTING(lDebug ? "BSD(3)" : "BSD");
784  }
785  else if (INFILE(_TITLE_OZPLB_10)) {
786  INTERESTING("OZPLB-1.0");
787  }
788  /*
789  * JPNIC
790  */
791  else if (HASTEXT(_TEXT_JPNIC, 0) && INFILE(_LT_JPNIC)) {
792  INTERESTING("JPNIC");
793  }
794  else if (NOT_INFILE(_CR_XFREE86) && NOT_INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_INNERNET200)) {
795  INTERESTING(lDebug ? "BSD-style(3)" : "BSD-style");
796  }
797  lmem[_fBSD] = 1;
798  }
799  else if (INFILE(_LT_BSD_4)) {
800  if (INFILE(_CR_BSDCAL)) {
801  INTERESTING(lDebug ? "BSD(4)" : "BSD");
802  }
803  else {
804  INTERESTING(lDebug ? "BSD-style(4)" : "BSD-style");
805  }
806  lmem[_fBSD] = 1;
807  }
808  /*
809  * FIX-ME: this license text explicitly mentions "for no-profit", and as
810  * such it should list it in the license-summary, yes?
811  */
812  else if (INFILE(_LT_BSD_5)) {
813  if (!lmem[_mPYTHON] && INFILE(_CR_PYTHON)) {
814  INTERESTING(lDebug ? "Python(2)" : "Python");
815  lmem[_mPYTHON] = 1;
816  }
817  else if (INFILE(_CR_USL_EUR)) {
818  INTERESTING(lDebug ? "USLE(1)" : "USL-Europe");
819  }
820  else if (INFILE(_CR_BSDCAL)) {
821  INTERESTING(lDebug ? "BSD(5)" : "BSD");
822  }
823  else {
824  INTERESTING(lDebug ? "BSD-style(5)" : "BSD-style");
825  }
826  lmem[_fBSD] = 1;
827  }
828  else if (INFILE(_LT_BSD_6)) {
829  if (INFILE(_CR_BSDCAL)) {
830  INTERESTING(lDebug ? "BSD(6)" : "BSD");
831  }
832  else {
833  INTERESTING(lDebug ? "BSD-style(6)" : "BSD-style");
834  }
835  lmem[_fBSD] = 1;
836  }
837  else if (INFILE(_LT_BSD_7)) {
838  if (HASTEXT(_LT_MAKEINDEX_1, 0) && HASTEXT(_LT_MAKEINDEX_2, 0)) {
839  INTERESTING("MakeIndex");
840  }
841  else if (INFILE(_CR_BSDCAL)) {
842  INTERESTING(lDebug ? "BSD(7)" : "BSD");
843  }
844  else {
845  INTERESTING(lDebug ? "BSD-style(7)" : "BSD-style");
846  }
847  lmem[_fBSD] = 1;
848  }
849  else if (INFILE(_LT_BSD_8)) {
850  if (INFILE(_CR_BSDCAL)) {
851  INTERESTING(lDebug ? "BSD(8)" : "BSD");
852  }
853  else {
854  INTERESTING(lDebug ? "BSD-style(8)" : "BSD-style");
855  }
856  lmem[_fBSD] = 1;
857  }
858  else if (INFILE(_LT_BSD_9)) {
859  if (INFILE(_CR_BSDCAL)) {
860  INTERESTING(lDebug ? "BSD(9)" : "BSD");
861  }
862  else {
863  INTERESTING(lDebug ? "BSD-style(8)" : "BSD-style");
864  }
865  lmem[_fBSD] = 1;
866  }
867  else if (INFILE(_LT_BSD_10)) {
868  if (INFILE(_CR_BSDCAL)) {
869  INTERESTING(lDebug ? "BSD(10)" : "BSD");
870  }
871  else {
872  INTERESTING(lDebug ? "BSD-style(9)" : "BSD-style");
873  }
874  lmem[_fBSD] = 1;
875  }
876  else if (INFILE(_LT_BSD_11)) {
877  if (INFILE(_CR_BSDCAL)) {
878  INTERESTING(lDebug ? "BSD(11)" : "BSD");
879  }
880  else {
881  INTERESTING(lDebug ? "BSD-style(10)" : "BSD-style");
882  }
883  lmem[_fBSD] = 1;
884  }
885  else if (INFILE(_LT_BSD_12)) {
886  if (INFILE(_CR_BSDCAL)) {
887  INTERESTING(lDebug ? "BSD(12)" : "BSD");
888  }
889  else {
890  INTERESTING(lDebug ? "BSD-style(11)" : "BSD-style");
891  }
892  lmem[_fBSD] = 1;
893  }
894  else if (INFILE(_LT_BSD_13)) {
895  if (INFILE(_CR_BSDCAL)) {
896  INTERESTING(lDebug ? "BSD(13)" : "BSD");
897  }
898  else {
899  INTERESTING(lDebug ? "BSD-style(12)" : "BSD-style");
900  }
901  lmem[_fBSD] = 1;
902  }
903  else if (INFILE(_LT_BSD_NONC)) {
904  if (INFILE(_CR_BSDCAL)) {
905  INTERESTING(lDebug ? "BSD(NonC)" : "BSD.non-commercial");
906  }
907  else {
908  INTERESTING(lDebug ? "BSD-style(NonC)" : "Non-commercial");
909  }
910  lmem[_fBSD] = 1;
911  }
912  else if (INFILE(_SPDX_BSD_3_Clause_Clear)) {
913  INTERESTING("BSD-3-Clause-Clear");
914  }
915  else if (INFILE(_SPDX_BSD_3_Clause_No_Nuclear_License_2014)) {
916  INTERESTING("BSD-3-Clause-No-Nuclear-License-2014");
917  }
918  else if (INFILE(_SPDX_BSD_3_Clause_No_Nuclear_License)) {
919  INTERESTING("BSD-3-Clause-No-Nuclear-License");
920  }
921  else if (INFILE(_SPDX_BSD_3_Clause_No_Nuclear_Warranty)) {
922  INTERESTING("BSD-3-Clause-No-Nuclear-Warranty");
923  }
924  else if (INFILE(_SPDX_BSD_3_Clause_Attribution)) {
925  INTERESTING("BSD-3-Clause-Attribution");
926  }
927  else if (INFILE(_SPDX_BSD_3_Clause_LBNL)) {
928  INTERESTING("BSD-3-Clause-LBNL");
929  }
930  else if (INFILE(_SPDX_BSD_3_Clause_Open_MPI)) {
931  INTERESTING("BSD-3-Clause-Open-MPI");
932  }
933  else if (INFILE(_SPDX_BSD_3_Clause)) {
934  INTERESTING("BSD-3-Clause");
935  }
936  else if (INFILE(_PHR_BSD_3_CLAUSE_1) || INFILE(_PHR_BSD_3_CLAUSE_2) || INFILE(_PHR_BSD_3_CLAUSE_3) || INFILE(_PHR_BSD_3_CLAUSE_4)) {
937  INTERESTING(lDebug ? "BSD(phr1/2)" : "BSD-3-Clause");
938  }
939  else if (INFILE(_SPDX_BSD_2_Clause_FreeBSD)) {
940  INTERESTING("BSD-2-Clause-FreeBSD");
941  }
942  else if (INFILE(_SPDX_BSD_2_Clause_NetBSD)) {
943  INTERESTING("BSD-2-Clause-NetBSD");
944  }
945  else if (INFILE(_SPDX_BSD_2_Clause_Patent)) {
946  INTERESTING("BSD-2-Clause-Patent");
947  }
948  else if (INFILE(_SPDX_BSD_2_Clause_Views)) {
949  INTERESTING("BSD-2-Clause-Views");
950  }
951  else if (INFILE(_SPDX_BSD_2_Clause_1)) {
952  INTERESTING("BSD-2-Clause");
953  }
954  else if (INFILE(_SPDX_BSD_2_Clause_2)) {
955  INTERESTING("BSD-2-Clause");
956  }
957  else if (INFILE(_PHR_BSD_2_CLAUSE_1)
958  || INFILE(_PHR_BSD_2_CLAUSE_2)
959  || INFILE(_PHR_BSD_2_CLAUSE_3)
960  || INFILE(_PHR_BSD_2_CLAUSE_4)
961  || INFILE(_PHR_BSD_2_CLAUSE_5)
962  || INFILE(_PHR_BSD_2_CLAUSE_6)
963  || INFILE(_PHR_BSD_2_CLAUSE_7)) {
964  INTERESTING(lDebug ? "BSD(phr1/2/3/4/5/6)" : "BSD-2-Clause");
965  }
966  else if (INFILE(_SPDX_BSD_4_Clause_UC)) {
967  INTERESTING("BSD-4-Clause-UC");
968  }
969  else if (INFILE(_SPDX_BSD_4_Clause)) {
970  INTERESTING("BSD-4-Clause");
971  }
972  else if (INFILE(_PHR_BSD_4_CLAUSE_1)) {
973  INTERESTING(lDebug ? "BSD-4-Clause(phr1)" : "BSD-4-Clause");
974  }
975  else if (INFILE(_PHR_BSD_CLEAR_1)) {
976  INTERESTING(lDebug ? "BSD-Clear(phr1)" : "BSD-3-Clause-Clear");
977  }
978  else if (INFILE(_PHR_BSD_3_CLAUSE_LBNL)) {
979  INTERESTING("BSD-3-Clause-LBNL");
980  }
981  else if (INFILE(_SPDX_BSD_Protection)) {
982  INTERESTING("BSD-Protection");
983  }
984  else if (INFILE(_SPDX_BSD_Source_Code)) {
985  INTERESTING("BSD-Source-Code");
986  }
987  else if (INFILE(_SPDX_BSD_1_Clause)) {
988  INTERESTING("BSD-1-Clause");
989  }
990  else if (INFILE(_PHR_0BSD)) {
991  INTERESTING("0BSD");
992  }
993  else if (INFILE(_LT_BSDref1)) {
994  INTERESTING(lDebug ? "BSD(ref1)" : "BSD");
995  }
996  else if (INFILE(_LT_BSDref2)) {
997  INTERESTING(lDebug ? "BSD(ref2)" : "BSD");
998  }
999  else if (INFILE(_LT_BSDref3)) {
1000  INTERESTING(lDebug ? "BSD(ref3)" : "BSD");
1001  }
1002  else if (INFILE(_LT_BSDref4)) {
1003  INTERESTING(lDebug ? "BSD(ref4)" : "BSD");
1004  }
1005  else if (INFILE(_LT_BSDref5)) {
1006  INTERESTING(lDebug ? "BSD(ref5)" : "BSD");
1007  }
1008  else if (INFILE(_LT_BSDref6)) {
1009  INTERESTING(lDebug ? "BSD(ref6)" : "BSD");
1010  }
1011  else if (INFILE(_LT_BSDref7)) {
1012  INTERESTING(lDebug ? "BSD(ref7)" : "BSD");
1013  }
1014  else if (INFILE(_LT_BSDref8)) {
1015  INTERESTING(lDebug ? "BSD(ref8)" : "BSD");
1016  }
1017  else if (INFILE(_LT_BSDref9)) {
1018  INTERESTING(lDebug ? "BSD(ref9)" : "BSD");
1019  }
1020  else if (INFILE(_LT_BSDref10)) {
1021  INTERESTING(lDebug ? "BSD(ref10)" : "BSD");
1022  }
1023  else if (INFILE(_LT_BSDref11)) {
1024  INTERESTING(lDebug ? "BSD(ref11)" : "BSD");
1025  }
1026  else if (INFILE(_LT_BSDref12) || HASTEXT(_LT_BSDref13, REG_EXTENDED)) {
1027  INTERESTING(lDebug ? "BSD(ref12)" : "BSD-3-Clause");
1028  }
1029  else if (URL_INFILE(_URL_BSD_1) || URL_INFILE(_URL_BSD_2)) {
1030  INTERESTING(lDebug ? "BSD(url)" : "BSD");
1031  lmem[_fBSD] = 1;
1032  }
1033  else if (INFILE(_LT_BSDref14)) {
1034  INTERESTING(lDebug ? "BSD(ref14)" : "BSD");
1035  lmem[_fBSD] = 1;
1036  }
1037  else if (INFILE(_LT_BSDref15)) {
1038  INTERESTING(lDebug ? "BSD(ref15)" : "BSD");
1039  lmem[_fBSD] = 1;
1040  }
1041  else if (INFILE(_LT_BSDSTYLEref1)) {
1042  INTERESTING(lDebug ? "BSD-st(1)" : "BSD-style");
1043  lmem[_fBSD] = 1;
1044  }
1045  else if (INFILE(_LT_BSDSTYLEref2)) {
1046  INTERESTING(lDebug ? "BSD-st(2)" : "BSD-style");
1047  lmem[_fBSD] = 1;
1048  }
1049  else if (INFILE(_LT_BSDSTYLEref4)) {
1050  INTERESTING(lDebug ? "BSD-st(4)" : "BSD-style");
1051  lmem[_fBSD] = 1;
1052  }
1053  else if (INFILE(_LT_BSDSTYLEref3)) {
1054  INTERESTING(lDebug ? "BSD-st(3)" : "BSD-style");
1055  lmem[_fBSD] = 1;
1056  }
1057  else if (INFILE(_LT_BSD_HTMLAREA_1) || INFILE(_LT_BSD_HTMLAREA_2)) {
1058  INTERESTING(lDebug ? "BSD-htmlArea" : "BSD-3-Clause");
1059  lmem[_fBSD] = 1;
1060  }
1061  else if (INFILE(_FILE_BSD1) || INFILE(_FILE_BSD2)) {
1062  INTERESTING(lDebug ? "BSD(deb)" : "BSD");
1063  }
1064  else if (INFILE(_CR_BSD_PERSONAL)) {
1065  INTERESTING("BSD");
1066  }
1068  /*
1069  * Aptana public license (based on MPL)
1070  */
1071  if (INFILE(_LT_APTANA)) {
1072  if (INFILE(_TITLE_APTANA_V10)) {
1073  INTERESTING("Aptana-1.0");
1074  }
1075  else {
1076  INTERESTING("Aptana");
1077  }
1078  lmem[_mMPL] = 1;
1079  lmem[_mAPTANA] = 1;
1080  }
1081  /*
1082  * PHP variants
1083  */
1084  if (!lmem[_mPHP] && INFILE(_LT_PHP)) {
1085  if (INFILE(_TITLE_PHP301)) {
1086  INTERESTING(lDebug ? "PHP(v3.01#2)" : "PHP-3.01");
1087  }
1088  else if (INFILE(_TITLE_PHP30)) {
1089  INTERESTING(lDebug ? "PHP(v3.0#2)" : "PHP-3.0");
1090  }
1091  else if (INFILE(_TITLE_PHP202)) {
1092  INTERESTING(lDebug ? "PHP(v2.02#3)" : "PHP-2.02");
1093  }
1094  else if (INFILE(_CR_PHP)) {
1095  INTERESTING(lDebug ? "PHP(1)" : "PHP");
1096  }
1097  else {
1098  INTERESTING("PHP-style");
1099  }
1100  lmem[_mPHP] = 1;
1101  }
1102  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V301_1)) {
1103  INTERESTING("PHP-3.01");
1104  lmem[_mPHP] = 1;
1105  }
1106  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V30_1)) {
1107  INTERESTING("PHP-3.0");
1108  lmem[_mPHP] = 1;
1109  }
1110  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V30_2)) {
1111  INTERESTING("PHP-3.0");
1112  lmem[_mPHP] = 1;
1113  }
1114  else if (!lmem[_mPHP] && INFILE(_LT_PHPref1)) {
1115  if (INFILE(_PHR_PHP_V301)) {
1116  INTERESTING(lDebug ? "PHP(ref-3.01)" : "PHP-3.01");
1117  }
1118  else if (INFILE(_PHR_PHP_V20)) {
1119  INTERESTING(lDebug ? "PHP(ref-2.0)" : "PHP-2.0");
1120  }
1121  else {
1122  INTERESTING(lDebug ? "PHP(ref)" : "PHP");
1123  }
1124  lmem[_mPHP] = 1;
1125  }
1126  else if (!lmem[_mPHP] && URL_INFILE(_URL_PHP)) {
1127  INTERESTING(lDebug ? "PHP(url)" : "PHP");
1128  lmem[_mPHP] = 1;
1129  }
1130  else if (INFILE(_LT_PHP_ref)) {
1131  INTERESTING(lDebug ? "PHP(2)" : "PHP");
1132  lmem[_mPHP] = 1;
1133  }
1135  /*
1136  * Licenses between here and all the GPL/LGPL/GFDL/FSF checks (below) MUST
1137  * be tested PRIOR to checking GPL/FSF and friends
1138  */
1139  if ((INFILE(_CR_EASYSW) || INFILE(_TITLE_CUPS)) && INFILE(_LT_CUPS)) {
1140  if (INFILE(_LT_CUPS_COMMERCIAL)) {
1141  INTERESTING("CUPS-EULA");
1142  }
1143  else {
1144  INTERESTING("CUPS");
1145  }
1146  lmem[_mCUPS] = 1;
1147  }
1149  if (INFILE(_LT_HACKTIVISMO)) {
1150  INTERESTING("Hacktivismo");
1151  lmem[_mGPL] = 1; /* don't look for GPL references */
1152  }
1154  if (INFILE(_LT_NESSUS) && INFILE(_TITLE_NESSUS)) {
1155  INTERESTING("NESSUS-EULA");
1156  lmem[_mLGPL] = 1; /* don't look for LGPL references */
1157  lmem[_mGPL] = 1;
1158  }
1160  /*
1161  * Oracle
1162  */
1163  if (INFILE(_LT_ORACLE_PROTO) && INFILE(_TITLE_ORACLE_PROTO)) {
1164  INTERESTING(lDebug ? "Oracle(proto)" : "Oracle-EULA");
1165  lmem[_mGPL] = 1;
1166  }
1167  else if (INFILE(_LT_ORACLE_DEVEL) && INFILE(_TITLE_ORACLE_DEVEL)) {
1168  INTERESTING(lDebug ? "Oracle(dev)" : "Oracle-Dev");
1169  }
1170  else if (URL_INFILE(_URL_ORACLE_BERKELEY_DB)) {
1171  INTERESTING(lDebug ? "URL_ORACLE_BERKELEY_DB" : "Oracle-Berkeley-DB");
1172  }
1174  /*
1175  * CeCILL
1176  * According to digikam-0.9.4/digikam/libs/greycstoration/CImg.h:
1177  * The CeCILL-C (C_V1) license is close to the GNU LGPL
1178  * The CeCILL (V2.0) license is compatible with the GNU GPL
1179  */
1180  if (INFILE(_TITLE_CECILL_V11_2) || INFILE(_SPDX_CECILL_11)) {
1181  INTERESTING(lDebug ? "CeCILL_v1.1(#2)" : "CECILL-1.1");
1182  lmem[_mGPL] = lmem[_mLGPL] = 1;
1183  }
1184  else if (INFILE(_TITLE_CECILL_B) || INFILE(_TITLE_CECILL_B1) || INFILE(_SPDX_CECILL_B)) {
1185  INTERESTING("CECILL-B");
1186  }
1187  else if (INFILE(_TITLE_CECILL_C) || INFILE(_TITLE_CECILL_C1) || INFILE(_SPDX_CECILL_C)) {
1188  INTERESTING("CECILL-C");
1189  }
1190  else if (INFILE(_LT_CECILL_DUALref)) {
1191  INTERESTING("CECILL(dual)");
1192  lmem[_mGPL] = lmem[_mLGPL] = 1;
1193  }
1194  else if (INFILE(_SPDX_CECILL_10)) {
1195  INTERESTING("CECILL-1.0");
1196  }
1197  else if (INFILE(_SPDX_CECILL_21)) {
1198  INTERESTING("CECILL-2.1");
1199  }
1200  else if (INFILE(_LT_CECILL_2_ref) || INFILE(_SPDX_CECILL_20)) {
1201  INTERESTING("CECILL-2.0");
1202  }
1203  else if (INFILE(_LT_CECILL_ref2)) {
1204  INTERESTING("CECILL");
1205  }
1206  else if (INFILE(_LT_CECILL_B_ref)) {
1207  INTERESTING("CECILL-B");
1208  }
1209  else if (INFILE(_LT_CECILL_ref) || INFILE(_LT_CECILL_ref1)) {
1210  if (URL_INFILE(_URL_CECILL_C_V11)) {
1211  INTERESTING(lDebug ? "CeCILL_v1.1(url)" : "CECILL-1.1");
1212  }
1213  else if (URL_INFILE(_URL_CECILL_C_V1)) {
1214  INTERESTING(lDebug ? "CeCILL_v1(url)" : "CECILL-1.0");
1215  }
1216  else if (URL_INFILE(_URL_CECILL_V2)) {
1217  INTERESTING(lDebug ? "CeCILL_v2(url)" : "CECILL-2.0");
1218  }
1219  else if (URL_INFILE(_URL_CECILL)) {
1220  INTERESTING(lDebug ? "CeCILL(url)" : "CECILL");
1221  }
1222  else {
1223  INTERESTING(lDebug ? "CeCILL(#3)" : "CECILL");
1224  }
1225  lmem[_mGPL] = 1;
1226  }
1227  else if (INFILE(_LT_CECILL_1)) {
1228  if (INFILE(_TITLE_CECILL_V10)) {
1229  INTERESTING(lDebug ? "CeCILL_v1.0(#1)" : "CECILL-1.0");
1230  }
1231  else if (INFILE(_TITLE_CECILL_V20)) {
1232  INTERESTING(lDebug ? "CeCILL_v2.0(#1)" : "CECILL-2.0");
1233  }
1234  lmem[_mGPL] = 1;
1235  }
1236  else if (INFILE(_LT_CECILL_2) || INFILE(_TITLE_CECILL1) || INFILE(_TITLE_CECILL2)) {
1237  if (INFILE(_TITLE_CECILL_V10)) {
1238  INTERESTING(lDebug ? "CeCILL_v1.0(#2)" : "CECILL-1.0");
1239  }
1240  else if (INFILE(_TITLE_CECILL_V11)) {
1241  INTERESTING(lDebug ? "CeCILL_v1.1(#1)" : "CECILL-1.1");
1242  }
1243  else if (INFILE(_TITLE_CECILL_V20)) {
1244  INTERESTING(lDebug ? "CeCILL_v2.0(#2)" : "CECILL-2.0");
1245  }
1246  else {
1247  INTERESTING(lDebug ? "CeCILL(#2)" : "CECILL");
1248  }
1249  lmem[_mGPL] = 1;
1250  }
1252  /*
1253  * Monash University
1254  */
1255  if (INFILE(_CR_UMONASH) && INFILE(_LT_UMONASH)) {
1256  INTERESTING("U-Monash");
1257  if (INFILE(_PHR_GPL_NO_MORE)) {
1258  lmem[_mGPL] = 1;
1259  }
1260  }
1262  /* Open Font License */
1263  if (INFILE(_LT_OPEN_FONT_V10) || INFILE(_LT_OPEN_FONT_V10_1))
1264  {
1265  INTERESTING("OFL-1.0");
1266  lmem[_fOFL] = 1;
1267  }
1268  else if (INFILE(_SPDX_OFL_10_no_RFN)) {
1269  INTERESTING("OFL-1.0-no-RFN");
1270  }
1271  else if (INFILE(_SPDX_OFL_10_RFN)) {
1272  INTERESTING("OFL-1.0-RFN");
1273  }
1274  else if (INFILE(_SPDX_OFL_10)) {
1275  INTERESTING("OFL-1.0");
1276  }
1277  else if (INFILE(_PHR_OPEN_FONT_V10_1) || INFILE(_PHR_OPEN_FONT_V10_2))
1278  {
1279  INTERESTING("OFL-1.0");
1280  lmem[_fOFL] = 1;
1281  }
1282  else if (INFILE(_LT_OPEN_FONT_V11) || INFILE(_LT_OPEN_FONT_V11_1))
1283  {
1284  INTERESTING("OFL-1.1");
1285  lmem[_fOFL] = 1;
1286  }
1287  else if (INFILE(_SPDX_OFL_11_no_RFN)) {
1288  INTERESTING("OFL-1.1-no-RFN");
1289  }
1290  else if (INFILE(_SPDX_OFL_11_RFN)) {
1291  INTERESTING("OFL-1.1-RFN");
1292  }
1293  else if (INFILE(_SPDX_OFL_11)) {
1294  INTERESTING("OFL-1.1");
1295  }
1296  else if (INFILE(_PHR_OPEN_FONT_V11_1) || INFILE(_PHR_OPEN_FONT_V11_2))
1297  {
1298  INTERESTING("OFL-1.1");
1299  lmem[_fOFL] = 1;
1300  }
1302  /* Simple Public License 2.0 */
1303  if (INFILE(_TITLE_SimPL_V2)) {
1304  INTERESTING("SimPL-2.0");
1305  lmem[_mGPL] = 1;
1306  }
1308  /* Leptonica license */
1309  if (INFILE(_TITLE_LEPTONICA) && INFILE(_LT_GNU_3)) {
1310  INTERESTING("Leptonica");
1311  }
1313  /* copyleft-next license
1314  * It has to be checked before GPL because the license has the reference
1315  * to GPL license which gives a false positive GPL finding.
1316  */
1317  if (INFILE(_TITLE_copyleft_next_030) && INFILE(_PHR_copyleft_next_PARA1) && INFILE(_PHR_copyleft_next_PARA3)) {
1318  INTERESTING("copyleft-next-0.3.0");
1319  lmem[_mGPL] = 1;
1320  }
1321  else if (INFILE(_TITLE_copyleft_next_031) && INFILE(_PHR_copyleft_next_PARA1) && INFILE(_PHR_copyleft_next_PARA3)) {
1322  INTERESTING("copyleft-next-0.3.1");
1323  lmem[_mGPL] = 1;
1324  }
1325  else if (INFILE(_PHR_copyleft_next_030) || INFILE(_SPDX_copyleft_next_030)) {
1326  INTERESTING("copyleft-next-0.3.0");
1327  }
1328  else if (INFILE(_PHR_copyleft_next_031) || INFILE(_SPDX_copyleft_next_031)) {
1329  INTERESTING("copyleft-next-0.3.1");
1330  }
1332  /*
1333  * GPL, LGPL, GFDL
1334  * QUESTION: do we need to check for the FSF copyright since we also
1335  * check for "GNU" or "free"?
1336  */
1337  if ((NOT_INFILE(_LT_FORMER_GNU) && (mCR_FSF() ||
1338  HASTEXT(_TEXT_GNUTERMS, REG_EXTENDED)))) {
1339  /*
1340  * Affero
1341  */
1342  if (INFILE(_PHR_AGPL) && NOT_INFILE(_LT_GPL3ref4)) {
1343  if (INFILE(_LT_AGPL1) || INFILE(_LT_AGPL2) ||
1344  INFILE(_LT_AGPL3)) {
1345  cp = AGPLVERS();
1346  INTERESTING(lDebug ? "Affero(#1)" : cp);
1347  lmem[_mGPL] = 1;
1348  }
1349  else if (INFILE(_LT_AGPLref1)) {
1350  cp = AGPLVERS();
1351  INTERESTING(lDebug ? "Affero(#2)" : cp);
1352  lmem[_mGPL] = 1;
1353  }
1354  else if (INFILE(_LT_AGPLref2) && NOT_INFILE(_LT_NOT_AGPLref1)) {
1355  cp = AGPLVERS();
1356  INTERESTING(lDebug ? "Affero(#3)" : cp);
1357  lmem[_mGPL] = 1;
1358  }
1359  else if (mCR_FSF() && NOT_INFILE(_LT_GPL3_NOT_AGPL)) {
1360  cp = AGPLVERS();
1361  INTERESTING(lDebug ? "Affero(CR)" : cp);
1362  lmem[_mGPL] = 1;
1363  }
1364  }
1365  else if (INFILE(_LT_AGPL_NAMED)) {
1366  cp = AGPLVERS();
1367  INTERESTING(lDebug ? "AGPL(named)" : cp);
1368  lmem[_mGPL] = 1;
1369  }
1370 
1371  /*
1372  * Some packages have a single file containing both a GPL and an LGPL
1373  * license. Therefore, these checks should NOT be exclusive.
1374  */
1375  /* * The Nethack General Public License (NGPL) */
1376  else if (INFILE(_TITLE_NGPL)) {
1377  INTERESTING("NGPL");
1378  lmem[_mGPL] = 1;
1379  }
1380  else if (INFILE(_LT_GPL_V1)) {
1381  INTERESTING("GPL-1.0-only");
1382  lmem[_mGPL] = 1;
1383  }
1384  else if (INFILE(_LT_GPL_1) && !HASTEXT(_LT_GPL_EXCEPT_0, REG_EXTENDED)) {
1385  if (INFILE(_PHR_GPL2_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1386  {
1387  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#1)" : "GPL-2.0-or-later");
1388  lmem[_mGPL] = 1;
1389  }
1390  else if (INFILE(_TITLE_GPL2)) {
1391  INTERESTING(lDebug ? "Title(GPL-2.0-only)" : "GPL-2.0-only");
1392  lmem[_mGPL] = 1;
1393  }
1394  else if (INFILE(_PHR_GPL1_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1395  {
1396  INTERESTING("GPL-1.0-or-later");
1397  lmem[_mGPL] = 1;
1398  }
1399  else if (INFILE(_TITLE_GPL1)) {
1400  INTERESTING("GPL-1.0-only");
1401  lmem[_mGPL] = 1;
1402  }
1403  else {
1404  INTERESTING("GPL");
1405  lmem[_mGPL] = 1;
1406  }
1407  }
1408  else if ((INFILE(_LT_GPL_V2) || INFILE(_LT_GPL_V2_ref) || INFILE(_LT_GPL_V2_ref1) || INFILE(_LT_GPL_V2_ref2)) && !HASTEXT(_LT_GPL_EXCEPT_0, REG_EXTENDED)) {
1409  if (INFILE(_PHR_GPL2_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1410  {
1411  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#2)" : "GPL-2.0-or-later");
1412  lmem[_mGPL] = 1;
1413  }
1414  else {
1415  INTERESTING(lDebug ? "LT(GPL-V2)" : "GPL-2.0-only");
1416  lmem[_mGPL] = 1;
1417  }
1418  }
1419  else if (INFILE(_PHR_GPL2_OR_LATER_2))
1420  {
1421  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#2)" : "GPL-2.0-or-later");
1422  lmem[_mGPL] = 1;
1423  }
1424  else if (INFILE(_LT_GPL3_PATENTS)) {
1425  if (INFILE(_TITLE_GPL3)) {
1426  INTERESTING(lDebug ? "GPL_v3(#1)" : "GPL-3.0-only");
1427  lmem[_mGPL] = 1;
1428  }
1429  else {
1430  INTERESTING("GPL-3.0-only-possibility");
1431  lmem[_mGPL] = 1;
1432  }
1433  }
1434  else if (INFILE(_TITLE_GPL3_ref3_later)) {
1435  INTERESTING("GPL-3.0-or-later");
1436  lmem[_mGPL] = 1;
1437  }
1438  else if (INFILE(_TITLE_GPL3_ref4_later)) {
1439  INTERESTING("GPL-3.0-or-later");
1440  lmem[_mGPL] = 1;
1441  }
1442  else if (INFILE(_TITLE_GPL3_ref3)) {
1443  INTERESTING("GPL-3.0-only");
1444  lmem[_mGPL] = 1;
1445  }
1446  if (INFILE(_LT_LGPL_1) || INFILE(_LT_LGPL_2) || INFILE(_LT_LGPL21_OR_LATER_GENERAL)) {
1447  if (INFILE(_PHR_LGPL21_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1448  {
1449  INTERESTING("LGPL-2.1-or-later");
1450  lmem[_mLGPL] = 1;
1451  }
1452  else if (INFILE(_PHR_LGPL2_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1453  {
1454  INTERESTING("LGPL-2.0-or-later");
1455  lmem[_mLGPL] = 1;
1456  }
1457  else if (INFILE(_TITLE_LGPLV21)) {
1458  INTERESTING("LGPL-2.1-only");
1459  lmem[_mLGPL] = 1;
1460  }
1461  else if (INFILE(_TITLE_LGPLV2)) {
1462  INTERESTING("LGPL-2.0-only");
1463  lmem[_mLGPL] = 1;
1464  }
1465  else {
1466  INTERESTING("LGPL");
1467  lmem[_mLGPL] = 1;
1468  }
1469  }
1470  else if (INFILE(_LT_LGPL_3)) {
1471  if ((INFILE(_PHR_LGPL3_OR_LATER)
1472  || INFILE(_PHR_LGPL3_OR_LATER_ref1)
1473  || INFILE(_PHR_LGPL3_OR_LATER_ref2))
1474  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1475  {
1476  INTERESTING("LGPL-3.0-or-later");
1477  lmem[_mLGPL] = 1;
1478  }
1479  else if (INFILE(_TITLE_LGPL3)) {
1480  INTERESTING("LGPL-3.0-only");
1481  lmem[_mLGPL] = 1;
1482  }
1483  else {
1484  INTERESTING("LGPL-3.0-only-possibility");
1485  lmem[_mLGPL] = 1;
1486  }
1487  }
1488  if (INFILE(_LT_GFDL)) {
1489  cp = GFDLVERS();
1490  INTERESTING(lDebug ? "GFDL(#1)" : cp);
1491  lmem[_mGFDL] = 1;
1492  }
1493  if (!lmem[_mLGPL] && NOT_INFILE(_LT_MPL_SECONDARY)) { /* no FSF/GPL-like match yet */
1494  /*
1495  NOTE: search for LGPL before GPL; the latter matches
1496  occurrences of former
1497  */
1498  if (INFILE(_LT_GPL_FONT1) && INFILE(_LT_GPL_FONT2)) {
1499  INTERESTING(lDebug ? "GPL(fonts)" : "GPL-exception");
1500  lmem[_mGPL] = 1;
1501  }
1502  else if (INFILE(_LT_LGPL_ALT)) {
1503  cp = LGPLVERS();
1504  INTERESTING(lDebug ? "LGPL(alternate)" : cp);
1505  lmem[_mLGPL] = 1;
1506  }
1507  else if (INFILE(_LT_LGPL3_ref_later)) {
1508  INTERESTING("LGPL-3.0-or-later");
1509  lmem[_mLGPL] = 1;
1510  }
1511  else if (INFILE(_LT_LGPLref1)) {
1512  cp = LGPLVERS();
1513  INTERESTING(lDebug ? "LGPL(ref1)" : cp);
1514  lmem[_mLGPL] = 1;
1515  }
1516  else if (INFILE(_LT_LGPLref2) &&
1517  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1518  cp = LGPLVERS();
1519  INTERESTING(lDebug ? "LGPL(ref2#1)" : cp);
1520  lmem[_mLGPL] = 1;
1521  }
1522  else if (INFILE(_LT_LGPLref3)) {
1523  cp = LGPLVERS();
1524  INTERESTING(lDebug ? "LGPL(ref3)" : cp);
1525  lmem[_mLGPL] = 1;
1526  }
1527  else if (INFILE(_LT_LGPLref4)) {
1528  cp = LGPLVERS();
1529  INTERESTING(lDebug ? "LGPL(ref4)" : cp);
1530  lmem[_mLGPL] = 1;
1531  }
1532  else if (INFILE(_LT_LGPLref5)) {
1533  cp = LGPLVERS();
1534  INTERESTING(lDebug ? "LGPL(ref5)" : cp);
1535  lmem[_mLGPL] = 1;
1536  }
1537  else if (INFILE(_LT_LGPLref6)) {
1538  cp = LGPLVERS();
1539  INTERESTING(lDebug ? "LGPL(ref6)" : cp);
1540  lmem[_mLGPL] = 1;
1541  }
1542  else if (!lmem[_mLIBRE] && !lmem[_fREAL] &&
1543  INFILE(_LT_LGPLref7) &&
1544  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1545  cp = LGPLVERS();
1546  INTERESTING(lDebug ? "LGPL(ref7)" : cp);
1547  lmem[_mLGPL] = 1;
1548  }
1549  else if (!lmem[_fREAL] && !lmem[_mAPTANA] &&
1550  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_LGPLref8) &&
1551  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1552  cp = LGPLVERS();
1553  INTERESTING(lDebug ? "LGPL(ref8)" : cp);
1554  lmem[_mLGPL] = 1;
1555  }
1556  else if (INFILE(_LT_LGPLref9) &&
1557  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1558  cp = LGPLVERS();
1559  INTERESTING(lDebug ? "LGPL(ref9)" : cp);
1560  lmem[_mLGPL] = 1;
1561  }
1562  else if (INFILE(_LT_LGPLref10) &&
1563  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1564  cp = LGPLVERS();
1565  INTERESTING(lDebug ? "LGPL(ref10)" : cp);
1566  lmem[_mLGPL] = 1;
1567  }
1568  else if (INFILE(_LT_LGPLref11)) {
1569  cp = LGPLVERS();
1570  INTERESTING(lDebug ? "LGPL(ref11)" : cp);
1571  lmem[_mLGPL] = 1;
1572  }
1573  else if (INFILE(_FILE_LGPL1) || INFILE(_FILE_LGPL2)) {
1574  cp = LGPLVERS();
1575  INTERESTING(lDebug ? "LGPL(deb)" : cp);
1576  lmem[_mLGPL] = 1;
1577  }
1578  else if (!LVAL(_TEXT_GNU_LIC_INFO) &&
1579  (URL_INFILE(_URL_LGPL_1) ||
1580  URL_INFILE(_URL_LGPL_2))) {
1581  cp = LGPLVERS();
1582  INTERESTING(lDebug ? "LGPL(url)" : cp);
1583  lmem[_mLGPL] = 1;
1584  }
1585  else if (lmem[_fREAL] && !LVAL(_TEXT_GNU_LIC_INFO) &&
1586  GPL_INFILE(_LT_LGPL_OR)) {
1587  cp = LGPLVERS();
1588  INTERESTING(lDebug ? "LGPL(or)" : cp);
1589  lmem[_mLGPL] = 1;
1590  }
1591  else if (INFILE(_PHR_LGPL21_OR_LATER_2)) {
1592  INTERESTING(lDebug ? "LGPL-2.1-or-later(_LATER_2)" : "LGPL-2.1-or-later");
1593  lmem[_mLGPL] = 1;
1594  }
1595  else if (INFILE(_PHR_LGPL21_ONLY_ref) || INFILE(_TITLE_LGPLV21_2)) {
1596  INTERESTING("LGPL-2.1-only");
1597  lmem[_mLGPL] = 1;
1598  }
1599  }
1600  if (!lmem[_mGPL] && !HASTEXT(_TEXT_GCC, REG_EXTENDED)) {
1601  if (GPL_INFILE(_LT_GPL_ALT) && !INFILE(_LT_LGPL_ALT)) {
1602  cp = GPLVERS();
1603  INTERESTING(lDebug ? "GPL(alternate)" : cp);
1604  lmem[_mGPL] = 1;
1605  }
1606  else if ((GPL_INFILE(_LT_GPL3ref2) || GPL_INFILE(_PHR_GPL3_OR_LATER)
1607  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref1) || GPL_INFILE(_PHR_GPL3_OR_LATER_ref2))
1608  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1609  {
1610  INTERESTING("GPL-3.0-or-later");
1611  lmem[_mGPL] = 1;
1612  }
1613  else if (GPL_INFILE(_LT_GPL3ref)) {
1614  INTERESTING(lDebug ? "GPL_v3(#2)" : "GPL-3.0-only");
1615  lmem[_mGPL] = 1;
1616  }
1617  else if (GPL_INFILE(_LT_GPL3ref3) && NOT_INFILE(_TITLE_LGPL3)) {
1618  INTERESTING("GPL-3.0-only");
1619  lmem[_mGPL] = 1;
1620  }
1621  else if (!lmem[_mLIBRE] && GPL_INFILE(_LT_GPLref1)
1622  && NOT_INFILE(_PHR_NOT_UNDER_GPL)
1623  && NOT_INFILE(_LT_LGPLref2)
1624  && NOT_INFILE(_PHR_GPL_COMPAT_3)) {
1625  /*
1626  * Special exceptions:
1627  * (1) LaTeX uses the following phrase:
1628  * "... why distributing LaTeX under the GNU General Public License (GPL)
1629  * was considered inappropriate".
1630  * (2) Python uses the following phrases:
1631  * "GPL-compatible doesn't mean that we're distributing Python under the GPL"
1632  * AND, "GPL-compatible licenses make it possible to combine Python with
1633  * other software that is released under the GPL.
1634  *****
1635  * These MUST be filtered. Do so by marking the GPL flag but don't assign
1636  * a license component (e.g., ignore GPL for this file)
1637  */
1638  if (INFILE(_PHR_LATEX_GPL_INAPPROPRIATE) ||
1639  INFILE(_PHR_PYTHON_NOTGPL_1) ||
1640  INFILE(_PHR_PYTHON_NOTGPL_2)) {
1641  lmem[_mGPL] = 1;
1642  }
1643  else if (!HASTEXT(_TEXT_GCC, REG_EXTENDED)
1644  && NOT_INFILE(_TITLE_D_FSL_10)){
1645  cp = GPLVERS();
1646  INTERESTING(cp);
1647  lmem[_mGPL] = 1;
1648  }
1649  }
1650  else if (INFILE(_LT_GPL_FSF)) {
1651  cp = GPLVERS();
1652  INTERESTING(lDebug ? "GPL(FSF)" : cp);
1653  lmem[_mGPL] = 1;
1654  }
1655  else if (GPL_INFILE(_LT_GPLref2)) {
1656  cp = GPLVERS();
1657  INTERESTING(lDebug ? "GPL(ref2)" : cp);
1658  lmem[_mGPL] = 1;
1659  }
1660  else if (GPL_INFILE(_LT_GPLref3)) {
1661  cp = GPLVERS();
1662  INTERESTING(lDebug ? "GPL(ref3)" : cp);
1663  lmem[_mGPL] = 1;
1664  }
1665  else if (INFILE(_LT_GPLref4)) {
1666  cp = GPLVERS();
1667  INTERESTING(lDebug ? "GPL(ref4)" : cp);
1668  lmem[_mGPL] = 1;
1669  }
1670  else if (GPL_INFILE(_LT_GPLref5)) {
1671  cp = GPLVERS();
1672  INTERESTING(lDebug ? "GPL(ref5)" : cp);
1673  lmem[_mGPL] = 1;
1674  }
1675  else if (GPL_INFILE(_LT_GPLref6)) {
1676  cp = GPLVERS();
1677  INTERESTING(lDebug ? "GPL(ref6)" : cp);
1678  lmem[_mGPL] = 1;
1679  }
1680  else if (GPL_INFILE(_LT_GPLref7)) {
1681  cp = GPLVERS();
1682  INTERESTING(lDebug ? "GPL(ref7)" : cp);
1683  lmem[_mGPL] = 1;
1684  }
1685  else if (GPL_INFILE(_LT_GPLref8)) {
1686  cp = GPLVERS();
1687  INTERESTING(lDebug ? "GPL(ref8)" : cp);
1688  lmem[_mGPL] = 1;
1689  }
1690  else if (INFILE(_LT_GPLref9)) {
1691  cp = GPLVERS();
1692  INTERESTING(lDebug ? "GPL(ref9)" : cp);
1693  lmem[_mGPL] = 1;
1694  }
1695  else if (GPL_INFILE(_LT_GPLref10)) {
1696  cp = GPLVERS();
1697  INTERESTING(lDebug ? "GPL(ref10)" : cp);
1698  lmem[_mGPL] = 1;
1699  }
1700  else if (INFILE(_LT_GPLref11)) {
1701  cp = GPLVERS();
1702  INTERESTING(lDebug ? "GPL(ref11)" : cp);
1703  lmem[_mGPL] = 1;
1704  }
1705  else if (INFILE(_LT_GPLref12)) {
1706  cp = GPLVERS();
1707  INTERESTING(lDebug ? "GPL(ref12)" : cp);
1708  lmem[_mGPL] = 1;
1709  }
1710  else if (GPL_INFILE(_LT_GPLref13)) {
1711  cp = GPLVERS();
1712  INTERESTING(lDebug ? "GPL(ref13)" : cp);
1713  lmem[_mGPL] = 1;
1714  }
1715  else if (GPL_INFILE(_LT_GPLref14) &&
1716  NOT_INFILE(_LT_LGPLref2)) {
1717  cp = GPLVERS();
1718  INTERESTING(lDebug ? "GPL(ref14)" : cp);
1719  lmem[_mGPL] = 1;
1720  }
1721  else if (INFILE(_LT_GPLref16)) {
1722  cp = GPLVERS();
1723  INTERESTING(lDebug ? "GPL(ref16)" : cp);
1724  lmem[_mGPL] = 1;
1725  }
1726  else if (INFILE(_LT_GPLref18)) {
1727  cp = GPLVERS();
1728  INTERESTING(lDebug ? "GPL(ref18)" : cp);
1729  lmem[_mGPL] = 1;
1730  }
1731  else if (INFILE(_LT_GPLref19)) {
1732  cp = GPLVERS();
1733  INTERESTING(lDebug ? "GPL(ref19)" : cp);
1734  lmem[_mGPL] = 1;
1735  }
1736  else if (INFILE(_LT_GPLref20)) {
1737  cp = GPLVERS();
1738  INTERESTING(lDebug ? "GPL(ref20)" : cp);
1739  lmem[_mGPL] = 1;
1740  }
1741  else if (!LVAL(_TEXT_GNU_LIC_INFO) && NOT_INFILE(_LT_INTEL_7) &&
1742  (URL_INFILE(_URL_GPL_1) ||
1743  URL_INFILE(_URL_GPL_2) ||
1744  URL_INFILE(_URL_GPL_3))) {
1745  cp = GPLVERS();
1746  INTERESTING(lDebug ? "GPL(url)" : cp);
1747  lmem[_mGPL] = 1;
1748  }
1749  else if (URL_INFILE(_URL_AGPL)) {
1750  cp = AGPLVERS();
1751  INTERESTING(lDebug ? "Affero(url)" : cp);
1752  lmem[_mGPL] = 1;
1753  }
1754  else if (!ltsr[_LT_LGPL_3] && INFILE(_LT_GPL_OR)) {
1755  cp = GPLVERS();
1756  INTERESTING(lDebug ? "GPL(or)" : cp);
1757  lmem[_mGPL] = 1;
1758  }
1759  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1760  (INFILE(_LT_GNU_1) + INFILE(_LT_GNU_2) +
1761  INFILE(_LT_GNU_3) + INFILE(_LT_GNU_4) > 2)) {
1762  cp = GPLVERS();
1763  INTERESTING(lDebug ? "GPL(GNU)" : cp);
1764  lmem[_mGPL] = 1;
1765  }
1766  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1767  INFILE(_LT_SEE_GPL) && INFILE(_LT_RECV_GPL)) {
1768  cp = GPLVERS();
1769  INTERESTING(lDebug ? "GPL(see)" : cp);
1770  lmem[_mGPL] = 1;
1771  }
1772  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1773  INFILE(_LT_SEE_LGPL) && INFILE(_LT_RECV_LGPL)) {
1774  cp = LGPLVERS();
1775  INTERESTING(lDebug ? "LGPL(see)" : cp);
1776  lmem[_mLGPL] = 1;
1777  }
1778  }
1779  if (!lmem[_mGFDL] && (INFILE(_LT_GFDLref1) ||
1780  INFILE(_TITLE_GFDL))) {
1781  cp = GFDLVERS();
1782  INTERESTING(lDebug ? "GFDL(#2)" : cp);
1783  lmem[_mGFDL] = 1;
1784  }
1785  /*
1786  * Listed _explictly_ as an exception to the GPL -- this is NOT an 'else'
1787  * clause!
1788  */
1789  if (!lmem[_mGPL] && INFILE(_PHR_GPL_DESCRIPTIONS)) {
1790  INTERESTING(lDebug ? "GPL-kinda" : "GPL");
1791  lmem[_mGPL] = 1;
1792  }
1793  /* checking for FSF */
1794  if (INFILE(_LT_FSF_1)) {
1795  INTERESTING(lDebug ? "FSF(1)" : "FSFULLR");
1796  lmem[_mLGPL] = 1;
1797  }
1798  else if (INFILE(_LT_FSF_2)) {
1799  INTERESTING(lDebug ? "FSF(2)" : "FSF");
1800  }
1801  else if (INFILE(_LT_FSF_3)) {
1802  INTERESTING(lDebug ? "FSF(3)" : "FSF");
1803  }
1804  else if (mCR_FSF() && INFILE(_LT_FSF_4)) {
1805  INTERESTING(lDebug ? "FSF(4)" : "FSF");
1806  }
1807  else if (!lmem[_mGPL] && mCR_FSF() && INFILE(_LT_FSF_5)) {
1808  INTERESTING(lDebug ? "FSF(5)" : "FSF");
1809  }
1810  else if (!lmem[_mGPL] && INFILE(_LT_FSFUL)) {
1811  INTERESTING("FSFUL");
1812  }
1813  else if (!lmem[_mGPL] && NOT_INFILE(_LT_Autoconf_exception_20) && INFILE(_LT_FSFref1)) {
1814  INTERESTING(lDebug ? "FSF(ref1)" : "FSF");
1815  }
1816  else if (INFILE(_LT_FSFref2)) {
1817  INTERESTING(lDebug ? "FSF(ref2)" : "FSF");
1818  }
1819  else if (INFILE(_LT_LGPLrefFSF) &&
1820  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1821  INTERESTING(lDebug ? "LGPL(FSF)" : "LGPL");
1822  lmem[_mLGPL] = 1;
1823  }
1824  if (!lmem[_mGPL] && !lmem[_mLGPL] && !lmem[_mGFDL]) {
1825  /*
1826  * Check these patterns AFTER checking for FSF and GFDL, and only if the
1827  * CUPS license isn't present.
1828  */
1829  if (!lmem[_mCUPS] ) {
1830  if (GPL_INFILE(_LT_GPLpatt1) &&
1831  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1832  cp = GPLVERS();
1833  INTERESTING(lDebug ? "GPL(patt1)" : cp);
1834  lmem[_mGPL] = 1;
1835  }
1836  else if (GPL_INFILE(_LT_GPLpatt2)) {
1837  cp = GPLVERS();
1838  INTERESTING(lDebug ? "GPL(patt2)" : cp);
1839  lmem[_mGPL] = 1;
1840  }
1841  else if (INFILE(_CR_rms) && INFILE(_LT_GPL_2)) {
1842  INTERESTING("GPL(rms)");
1843  lmem[_mGPL] = 1;
1844  }
1845  else if (INFILE(_PHR_GPLISH_SAMPLE)) {
1846  INTERESTING(lDebug ? "GPLISH" : "GPL-possibility");
1847  INTERESTING(lDebug ? "GPLISH" : "LGPL-possibility");
1848  lmem[_mLGPL] = lmem[_mGPL] = 1;
1849  }
1850  }
1851  }
1852  else if (INFILE(_LT_GNU_COPYLEFT)) {
1853  INTERESTING("GNU-copyleft");
1854  lmem[_fGPL] = 1;
1855  }
1856  lmem[_fGPL] = lmem[_mLGPL]+lmem[_mGPL]+lmem[_mGFDL];
1857  }
1859  if (!lmem[_mGPL] && INFILE(_LT_GNU_PROJECTS)) {
1860  cp = GPLVERS();
1861  INTERESTING(lDebug ? "GPL(proj)" : cp);
1862  lmem[_mGPL] = 1;
1863  }
1865  if (HASTEXT(_LT_GPL_V2_NAMED_later, REG_EXTENDED) || HASTEXT(_TITLE_GPL2_ref1_later, REG_EXTENDED))
1866  {
1867  INTERESTING(lDebug ? "GPLV2+(named)" : "GPL-2.0-or-later");
1868  lmem[_mGPL] = 1;
1869  }
1870  else if (INFILE(_LT_TAPJOY) || INFILE(_LT_TAPJOY_ref1)) {
1871  INTERESTING("Tapjoy");
1872  lmem[_fGPL] = 1;
1873  lmem[_mMIT] = 1;
1874  }
1875  else if (!lmem[_mGPL] && !lmem[_mGFDL] && !lmem[_mLGPL] && !lmem[_fZPL]
1876  && (INFILE(_LT_GPL_NAMED)
1877  || INFILE(_LT_GPL_NAMED2)
1878  || HASTEXT(_LT_GPL_NAMED3, REG_EXTENDED))
1879  && !HASTEXT(_PHR_GPL_GHOSTSCRIPT, REG_EXTENDED)
1880  && NOT_INFILE(_LT_MPL_SECONDARY)
1881  && NOT_INFILE(_TEXT_NOT_GPL)
1882  && NOT_INFILE(_TEXT_NOT_GPL2)
1883  && NOT_INFILE(_LT_CNRI_PYTHON_GPL)
1884  && NOT_INFILE(_LT_W3Cref4)
1885  && NOT_INFILE(_LT_GPL_NAMED3_EXHIBIT)
1886  && NOT_INFILE(_LT_GPL_NAMED_COMPATIBLE)
1887  && !HASTEXT(_LT_GPL_NAMED_COMPATIBLE_1, REG_EXTENDED)
1888  && NOT_INFILE(_LT_GPL_NAMED_EXHIBIT)
1889  && NOT_INFILE(_TITLE_D_FSL_10)
1890  && NOT_INFILE(_LT_INTEL_7)
1891  && NOT_INFILE(_PHR_GPL_COMPAT_3)) {
1892  cp = GPLVERS();
1893  INTERESTING(lDebug ? "GPL(named)" : cp);
1894  lmem[_mGPL] = 1;
1895  }
1896  else if ( !lmem[_mGPL] && !INFILE(_TITLE_MIROS) && (INFILE(_LT_GPL_V2_NAMED) || INFILE(_LT_GPL_V2_NAMED_ref1)))
1897  {
1898  INTERESTING(lDebug ? "GPLV2(named)" : "GPL-2.0-only");
1899  lmem[_mGPL] = 1;
1900  }
1901  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_NAMED_later))
1902  {
1903  INTERESTING(lDebug ? "GPLV3(named_later)" : "GPL-3.0-or-later");
1904  }
1905  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_NAMED))
1906  {
1907  INTERESTING(lDebug ? "GPLV3(named)" : "GPL-3.0-only");
1908  }
1910  if (!lmem[_mLGPL] && (INFILE(_LT_LGPL_NAMED)
1911  || INFILE(_LT_LGPL_NAMED2)) && NOT_INFILE(_LT_GPL_NAMED_EXHIBIT)
1912  && NOT_INFILE(_LT_PHP_V30_2)) {
1913  cp = LGPLVERS();
1914  INTERESTING(lDebug ? "LGPL(named)" : cp);
1915  }
1916 
1918  /*
1919  * MIT, X11, Open Group, NEC -- text is very long, search in 2 parts
1920  */
1921  if (INFILE(_LT_JSON) && INFILE(_LT_MIT_NO_EVIL)) { // JSON license
1922  INTERESTING("JSON");
1923  lmem[_mMIT] = 1;
1924  }
1926  if (!lmem[_mWORDNET] && INFILE(_TITLE_WORDNET))
1927  {
1928  INTERESTING("WordNet-3.0");
1929  }
1931  if (INFILE(_CR_XFREE86_V10) || INFILE(_LT_XFREE86_V10)) {
1932  INTERESTING("XFree86-1.0");
1933  lmem[_mMIT] = 1;
1934  }
1935  else if (INFILE(_CR_XFREE86_V11) || INFILE(_LT_XFREE86_V11)) {
1936  INTERESTING("XFree86-1.1");
1937  lmem[_mMIT] = 1;
1938  }
1939  else if (INFILE(_LT_XFREE86)) {
1940  INTERESTING(lDebug ? "XFree86(1)" : "XFree86");
1941  lmem[_mMIT] = 1;
1942  }
1943  else if (HASTEXT(_LT_BSD_OR_MIT, REG_EXTENDED)) {
1944  INTERESTING("MIT");
1945  INTERESTING("BSD");
1946  lmem[_mMIT] = 1;
1947  }
1948  else if (HASTEXT(_LT_BSD_AND_MIT, REG_EXTENDED)) {
1949  INTERESTING("BSD");
1950  INTERESTING("MIT");
1951  lmem[_mMIT] = 1;
1952  }
1953  /*
1954  * MIT search order changed. First MIT license explicit phrases and references are checked .
1955  */
1956  else if (!lmem[_mMIT] && NOT_INFILE(_TITLE_MIT_EXHIBIT) && NOT_INFILE(_TITLE_SGI) &&
1957  (INFILE(_LT_MIT_1) || INFILE(_TITLE_MIT))) {
1958  if(INFILE(_LT_MIT_NO_EVIL)) {
1959  INTERESTING(lDebug ? "MIT-style(no evil)" : "JSON");
1960  lmem[_mMIT] = 1;
1961  }
1962  else if (INFILE(_LT_MIT_2)) {
1963  if (mCR_MIT() || INFILE(_TITLE_MIT)) {
1964  INTERESTING(lDebug ? "MIT(1)" : "MIT");
1965  lmem[_mMIT] = 1;
1966  }
1967  else if (INFILE(_TITLE_XNET)) {
1968  INTERESTING("Xnet");
1969  lmem[_mMIT] = 1;
1970  }
1971  else if (INFILE(_CR_X11) || INFILE(_TITLE_X11)) {
1972  INTERESTING(lDebug ? "X11(1)" : "X11");
1973  lmem[_mMIT] = 1;
1974  }
1975  else if (INFILE(_CR_XFREE86)) {
1976  INTERESTING(lDebug ? "XFree86(2)" : "XFree86");
1977  lmem[_mMIT] = 1;
1978  }
1979  /* MIT-advertising License */
1980  else if (INFILE(_LT_MIT_ADVERTISING)) {
1981  INTERESTING("MIT-advertising");
1982  lmem[_mMIT] = 1;
1983  }
1984  /* MIT-enna License */
1985  else if (INFILE(_LT_MIT_ENNA)) {
1986  INTERESTING("MIT-enna");
1987  lmem[_mMIT] = 1;
1988  }
1989  /* MIT-feh License */
1990  else if (INFILE(_LT_MIT_FEH)) {
1991  INTERESTING("MIT-feh");
1992  lmem[_mMIT] = 1;
1993  }
1994  /* MITNFA License */
1995  else if (HASTEXT(_LT_MITNFA, 0)) {
1996  INTERESTING("MITNFA");
1997  lmem[_mMIT] = 1;
1998  }
1999  /* Imlib2 License */
2000  else if (INFILE(_LT_Imlib2)) {
2001  INTERESTING("Imlib2");
2002  lmem[_mMIT] = 1;
2003  }
2004  else if (INFILE(_LT_MIT_13)) {
2005  INTERESTING(lDebug ? "MIT(14)" : "MIT");
2006  lmem[_mMIT] = 1;
2007  }
2008  /* NCSA */
2009  else if (INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_NCSA_EXHIBIT)) {
2010  INTERESTING(lDebug ? "NCSA(1)" : "NCSA");
2011  lmem[_mMIT] = 1;
2012  lmem[_fNCSA] = 1;
2013  }
2014  else if (INFILE(_LT_MIT_0)) {
2015  INTERESTING("MIT-0");
2016  lmem[_mMIT] = 1;
2017  }
2018  else if (NOT_INFILE(_LT_INTEL_7)) {
2019  INTERESTING(lDebug ? "MIT-style(1)" : "MIT-style");
2020  lmem[_mMIT] = 1;
2021  }
2022  }
2023  else if (INFILE(_LT_BITSTREAM_1)) {
2024  INTERESTING(lDebug ? "Bitstream(1)" : "Bitstream");
2025  lmem[_mMIT] = 1;
2026  }
2027  else if (mCR_X11()) {
2028  INTERESTING(lDebug ? "X11(2)" : "X11");
2029  }
2030  else if (!lmem[_mMPL] && INFILE(_LT_MPL_1)) {
2031  cp = MPLVERS(); /* NPL, too */
2032  INTERESTING(lDebug ? "MPL/NPL#5" : cp);
2033  lmem[_mMPL] = 1;
2034  }
2035  else if (!lmem[_mMIT] && (mCR_MIT() || INFILE(_TITLE_MIT)) && NOT_INFILE(_TITLE_MIT_EXHIBIT)) {
2036  INTERESTING(lDebug ? "MIT(2)" : "MIT");
2037  lmem[_mMIT] = 1;
2038  }
2039  /*
2040  * BOOST (relatively new, circa August 2003)
2041  * hmm, some references have a Copyright Notre Dame, some don't
2042  */
2043  else if (INFILE(_LT_BOOST_1)) {
2044  if (INFILE(_TITLE_BOOST10)) {
2045  INTERESTING("BSL-1.0");
2046  }
2047  else if (INFILE(_CR_NOTREDAME)) {
2048  INTERESTING(lDebug ? "Boost(ND)" : "BSL-1.0");
2049  }
2050  else if (INFILE(_TITLE_BOOST)) {
2051  INTERESTING("BSL-1.0");
2052  }
2053  else {
2054  INTERESTING("BSL-style");
2055  }
2056  }
2057  else if (mCR_MIT()) {
2058  INTERESTING(lDebug ? "MIT(3)" : "MIT");
2059  lmem[_mMIT] = 1;
2060  }
2061  else if (INFILE(_TITLE_ICU) || HASTEXT(_URL_ICU, REG_EXTENDED)) {
2062  INTERESTING(lDebug ? "MIT-style(ICU)" : "ICU");
2063  lmem[_mMIT] = 1;
2064  }
2065  else if (INFILE(_LT_ICU_2) && (INFILE(_CR_IBM_1) || INFILE(_CR_IBM_1))) {
2066  INTERESTING(lDebug ? "MIT-style(ICU)" : "ICU");
2067  lmem[_mMIT] = 1;
2068  }
2069  else if (INFILE(_TITLE_JasPer_20)) {
2070  INTERESTING(lDebug ? "JasPer(title)" : "JasPer-2.0");
2071  lmem[_mMIT] = 1;
2072  }
2073  else if (INFILE(_LT_UNICODE_4)) {
2074  INTERESTING(lDebug ? "MIT-style(Unicode)" : "Unicode");
2075  lmem[_fUNICODE] = 1;
2076  lmem[_mMIT] = 1;
2077  }
2078  /*
2079  * Adobe-Glyph
2080  */
2081  else if (HASTEXT(_LT_ADOBE_GLYPH_1, REG_EXTENDED) && INFILE(_LT_ADOBE_GLYPH_2)) {
2082  INTERESTING("Adobe-Glyph");
2083  }
2084  /*
2085  * Ubuntu Font
2086  */
2087  else if (INFILE(_LT_UBUNTU_FONT)) {
2088  INTERESTING("ubuntu-font-1.0");
2089  }
2090  /*
2091  * OFL license text has MIT license warranty claims which is identifed as MIT-style
2092  */
2093  else if (!lmem[_fOFL]) {
2094  INTERESTING(lDebug ? "MIT-style(2)" : "MIT-style");
2095  lmem[_mMIT] = 1;
2096  }
2097  }
2098  /*
2099  * Secondly X11 and MIT style phrases are checked.
2100  */
2101  else if (INFILE(_LT_MIT_0) && (INFILE(_LT_MIT_2) || INFILE(_LT_MIT_3) || INFILE(_LT_MIT_4) ||
2102  INFILE(_LT_MIT_5) || INFILE(_LT_MIT_6) || INFILE(_LT_MIT_7))) {
2103  if(INFILE(_LT_MIT_NO_EVIL)) {
2104  INTERESTING(lDebug ? "MIT-style(no evil)" : "JSON");
2105  lmem[_mMIT] = 1;
2106  }
2107  else if (INFILE(_LT_X11_5)) {
2108  if (INFILE(_CR_XFREE86)) {
2109  INTERESTING(lDebug ? "XFree86(3)" : "XFree86");
2110  }
2111  else {
2112  INTERESTING(lDebug ? "X11(3)" : "X11");
2113  }
2114  lmem[_mMIT] = 1;
2115  }
2116  else if (INFILE(_LT_Xnet_STYLE)) {
2117  INTERESTING("Xnet");
2118  lmem[_mMIT] = 1;
2119  }
2120  else if (INFILE(_LT_TAPJOY)) {
2121  INTERESTING("Tapjoy");
2122  lmem[_mMIT] = 1;
2123  }
2124  else {
2125  /*
2126  * SPDX defines curl license. It has very typical MIT-style text. The only way to
2127  * identify it is to use copyright or copyright reference.
2128  */
2129  if (INFILE(_CR_CURL)) {
2130  INTERESTING("curl");
2131  }
2132  else {
2133  INTERESTING(lDebug ? "MIT-style(7)" : "MIT-style");
2134  }
2135  lmem[_mMIT] = 1;
2136  }
2137  }
2138  else if (INFILE(_LT_MIT_5)) {
2139  if (mCR_MIT()) {
2140  INTERESTING(lDebug ? "MIT(4)" : "MIT");
2141  }
2142  else {
2143  INTERESTING(lDebug ? "MIT-style(3)" : "MIT-style");
2144  }
2145  lmem[_mMIT] = 1;
2146  }
2148  /*
2149  * Open Group, NEC, MIT use the same text in licenses
2150  */
2151  if (INFILE(_LT_MIT_6)) {
2152  if (!lmem[_mMIT] && INFILE(_CR_OpenGroup)) {
2153  INTERESTING(lDebug ? "OpenGroup(1)" : "OpenGroup");
2154  lmem[_mMIT] = 1;
2155  }
2156  else if (!lmem[_mCMU] && mCR_CMU()) {
2157  INTERESTING(lDebug ? "CMU(2)" : "CMU");
2158  lmem[_mCMU] = 1;
2159  }
2160  else if (!lmem[_mMIT] && mCR_MIT()) {
2161  INTERESTING(lDebug ? "MIT(6)" : "MIT");
2162  lmem[_mMIT] = 1;
2163  }
2164  else if (!lmem[_mMIT] && INFILE(_LT_HPND_1) && INFILE(_LT_HPND_2)) {
2165  INTERESTING("HPND-sell-variant");
2166  lmem[_mMIT] = 1;
2167  }
2168  /*
2169  * _LT_MIT_6 is very similar to _LT_BSD_2 where MIT-CMU licenses
2170  * are also detected. Following else if is the copy from there.
2171  */
2172  else if (!lmem[_mMIT] && INFILE(_LT_CMU_7)) {
2173  if (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2) || INFILE(_CR_BSDCAL)) {
2174  INTERESTING("MIT-CMU");
2175  }
2176  else {
2177  INTERESTING("MIT-CMU-style");
2178  }
2179  lmem[_mCMU] = 1;
2180  }
2181  else if (!lmem[_mMIT]) {
2182  INTERESTING(lDebug ? "MIT-style(4)" : "MIT-style");
2183  lmem[_mMIT] = 1;
2184  }
2185  }
2186  else if (INFILE(_SPDX_MIT_0)) {
2187  INTERESTING("MIT-0");
2188  }
2189  else if (INFILE(_SPDX_MIT_advertising)) {
2190  INTERESTING("MIT-advertising");
2191  }
2192  else if (INFILE(_SPDX_MIT_enna)) {
2193  INTERESTING("MIT-enna");
2194  }
2195  else if (INFILE(_SPDX_MIT_feh)) {
2196  INTERESTING("MIT-feh");
2197  }
2198  else if (!lmem[_mMIT] && INFILE(_LT_MIT_7)) {
2199  if (INFILE(_CR_OpenGroup)) {
2200  INTERESTING(lDebug ? "OpenGroup(2)" : "OpenGroup");
2201  }
2202  else if (!lmem[_mMIT] && mCR_MIT()) {
2203  INTERESTING(lDebug ? "MIT(7)" : "MIT");
2204  lmem[_mMIT] = 1;
2205  }
2206  else {
2207  INTERESTING(lDebug ? "MIT-style(5)" : "MIT-style");
2208  lmem[_mMIT] = 1;
2209  }
2210  }
2211  else if ((!lmem[_mMIT] || mCR_MIT()) && INFILE(_LT_MITref1)) {
2212  INTERESTING(lDebug ? "MIT(ref1)" : "MIT");
2213  lmem[_mMIT] = 1;
2214  }
2215  else if (!lmem[_mMIT] && INFILE(_LT_MITref2)) {
2216  INTERESTING(lDebug ? "MIT(ref2)" : "MIT");
2217  lmem[_mMIT] = 1;
2218  }
2219  else if (!lmem[_mMIT] && INFILE(_LT_MITref6)) {
2220  INTERESTING(lDebug ? "MIT(ref6)" : "MIT");
2221  lmem[_mMIT] = 1;
2222  }
2223  else if (!lmem[_mMIT] && INFILE(_LT_MITref3)) {
2224  INTERESTING(lDebug ? "MIT(ref3)" : "MIT-style");
2225  lmem[_mMIT] = 1;
2226  }
2227  else if (!lmem[_mMIT] && INFILE(_LT_MITref4)) {
2228  INTERESTING(lDebug ? "MIT(ref4)" : "MIT");
2229  lmem[_mMIT] = 1;
2230  }
2231  else if (!lmem[_mMIT] && (INFILE(_LT_MITref5) || INFILE(_LT_MITref9))) {
2232  INTERESTING(lDebug ? "MIT(ref5)" : "MIT");
2233  lmem[_mMIT] = 1;
2234  }
2235  else if (INFILE(_SPDX_MIT_CMU)) {
2236  INTERESTING("MIT-CMU");
2237  }
2238  else if (!lmem[_fREAL] && (INFILE(_SPDX_MIT))) {
2239  INTERESTING(lDebug ? "MIT(SPDX)" : "MIT");
2240  }
2241  else if (!lmem[_mMIT] && !lmem[_fREAL] && INFILE(_LT_MITref7)) {
2242  INTERESTING(lDebug ? "MIT(ref7)" : "MIT");
2243  lmem[_mMIT] = 1;
2244  }
2245  else if (!lmem[_mMIT] && INFILE(_LT_MITref8)) {
2246  INTERESTING(lDebug ? "MIT(ref8/9)" : "MIT");
2247  lmem[_mMIT] = 1;
2248  }
2249  else if (INFILE(_LT_OpenGroup_1)) {
2250  if (INFILE(_CR_OpenGroup)) {
2251  INTERESTING(lDebug ? "OpenGroup(3)" : "OpenGroup");
2252  }
2253  else {
2254  INTERESTING(lDebug ? "OG-style(3)" : "OpenGroup-style");
2255  }
2256  }
2257  else if (INFILE(_LT_OpenGroup_3)) {
2258  if (INFILE(_CR_OpenGroup)) {
2259  INTERESTING(lDebug ? "OpenGroup(5)" : "OpenGroup");
2260  }
2261  else {
2262  INTERESTING(lDebug ? "OG-style(5)" : "OpenGroup-style");
2263  }
2264  }
2265  else if (INFILE(_LT_OpenGroup_PROP)) {
2266  if (!lmem[_mXOPEN] && INFILE(_CR_XOPEN)) {
2267  INTERESTING("XOPEN-EULA");
2268  lmem[_mXOPEN] = 1;
2269  }
2270  else if (INFILE(_CR_OpenGroup)) {
2271  INTERESTING("OpenGroup-Proprietary");
2272  }
2273  else {
2274  INTERESTING("Proprietary");
2275  }
2276  }
2277  else if (INFILE(_LT_X11_1)) {
2278  if (mCR_X11()) {
2279  INTERESTING(lDebug ? "X11(4)" : "X11");
2280  }
2281  else {
2282  INTERESTING(lDebug ? "X11-style(2)" : "X11-style");
2283  }
2284  }
2285  else if (INFILE(_LT_X11_2)) {
2286  if (mCR_X11()) {
2287  INTERESTING(lDebug ? "X11(5)" : "X11");
2288  }
2289  else {
2290  INTERESTING(lDebug ? "X11-style(3)" : "X11-style");
2291  }
2292  }
2293  else if (INFILE(_LT_X11_3)) {
2294  if (mCR_X11()) {
2295  INTERESTING(lDebug ? "X11(6)" : "X11");
2296  }
2297  /*
2298  * Unix System Laboratories
2299  */
2300  else if (INFILE(_CR_USL_EUR)) {
2301  INTERESTING(lDebug ? "USLE(2)" : "USL-Europe");
2302  }
2303  else {
2304  INTERESTING(lDebug ? "X11-style(4)" : "X11-style");
2305  }
2306  }
2307  else if (INFILE(_LT_X11_4)) {
2308  if (mCR_X11()) {
2309  INTERESTING(lDebug ? "X11(7)" : "X11");
2310  }
2311  else {
2312  INTERESTING(lDebug ? "X11-style(5)" : "X11-style");
2313  }
2314  }
2315  else if (INFILE(_PHR_X11_1) || INFILE(_PHR_X11_2)) {
2316  INTERESTING(lDebug ? "PHR(X11)" : "X11");
2317  }
2318  else if (INFILE(_LT_X11_STYLE)) {
2319  INTERESTING(lDebug ? "X11-style(6)" : "X11-style");
2320  }
2321  /*
2322  * ISC License
2323  */
2324  if (INFILE(_PHR_ISC_1) || INFILE(_PHR_ISC_2) || HASTEXT(_URL_ISC, REG_EXTENDED)) {
2325  INTERESTING(lDebug ? "PHR(ISC)" : "ISC");
2326  lmem[_mISC] = 1;
2327  }
2328  else if (INFILE(_LT_MIT_4) && INFILE(_PHR_NO_WARRANTY_12)) {
2329  INTERESTING(lDebug ? "ISC(MIT-style(4))" : "ISC");
2330  lmem[_mISC] = 1;
2331  }
2332  else if (INFILE(_LT_MIT_8) && INFILE(_CR_ISC)) {
2333  INTERESTING(lDebug ? "ISC(MIT-style(8))" : "ISC");
2334  lmem[_mISC] = 1;
2335  }
2337  /*
2338  * NTP License, note that NTP license text is detected with _LT_BSD_2
2339  */
2340  if (INFILE(_TITLE_NTP)) {
2341  INTERESTING("NTP");
2342  lmem[_mNTP] = 1;
2343  }
2345  /* MirOS License (MirOS) */
2346  if (INFILE(_TITLE_MIROS)) {
2347  INTERESTING("MirOS");
2348  lmem[_mMIT] = 1;
2349  }
2351  /* Libpng license */
2352  if (INFILE(_TITLE_LIBPNG)) {
2353  INTERESTING("Libpng");
2354  }
2355  else if (INFILE(_LT_W3C_1)) {
2356  if (INFILE(_CR_W3C)) {
2357  INTERESTING(lDebug ? "W3C(1)" : "W3C");
2358  }
2359  else {
2360  INTERESTING(lDebug ? "W3C-style(1)" : "W3C-style");
2361  }
2362  lmem[_fW3C] = 1;
2363  }
2364  else if (!lmem[_mNTP] && !lmem[_mPYTHON] && !lmem[_fBSD] && INFILE(_LT_W3C_2)) {
2365  if (INFILE(_LT_W3C_19980720)) {
2366  INTERESTING("W3C-19980720");
2367  }
2368  else if (INFILE(_CR_W3C)) {
2369  INTERESTING(lDebug ? "W3C(2)" : "W3C");
2370  }
2371  else {
2372  INTERESTING(lDebug ? "W3C-style(2)" : "W3C-style");
2373  }
2374  lmem[_fW3C] = 1;
2375  }
2376  else if (INFILE(_LT_W3C_3)) {
2377  if (INFILE(_LT_W3C_8)) {
2378  if (INFILE(_LT_W3C_20021231)) {
2379  INTERESTING("W3C");
2380  }
2381  else if (INFILE(_LT_W3C_20150513)) {
2382  INTERESTING("W3C-20150513");
2383  }
2384  }
2385  else if (INFILE(_CR_W3C)) {
2386  INTERESTING(lDebug ? "W3C(3)" : "W3C");
2387  }
2388  else if (INFILE(_LT_W3Cref4)) {
2389  INTERESTING(lDebug ? "W3C(ref4)" : "W3C");
2390  }
2391  else {
2392  INTERESTING(lDebug ? "W3C-style(3)" : "W3C-style");
2393  }
2394  lmem[_fW3C] = 1;
2395  }
2396  else if (INFILE(_LT_W3C_4) && NOT_INFILE(_LT_PNG_ZLIB_2)) {
2397  if (INFILE(_CR_W3C)) {
2398  INTERESTING(lDebug ? "W3C(4)" : "W3C");
2399  }
2400  else {
2401  INTERESTING(lDebug ? "W3C-style(4)" : "W3C-style");
2402  }
2403  lmem[_fW3C] = 1;
2404  }
2405  else if (INFILE(_LT_W3C_5)) {
2406  if (INFILE(_CR_W3C)) {
2407  INTERESTING(lDebug ? "W3C(5)" : "W3C");
2408  }
2409  else {
2410  INTERESTING(lDebug ? "W3C-style(5)" : "W3C-style");
2411  }
2412  lmem[_fW3C] = 1;
2413  }
2414  else if (INFILE(_LT_W3C_6)) {
2415  if (INFILE(_CR_W3C)) {
2416  INTERESTING(lDebug ? "W3C(6)" : "W3C");
2417  }
2418  else {
2419  INTERESTING(lDebug ? "W3C-style(6)" : "W3C-style");
2420  }
2421  lmem[_fW3C] = 1;
2422  }
2423  else if (INFILE(_LT_W3C_7)) {
2424  if (INFILE(_CR_W3C)) {
2425  INTERESTING(lDebug ? "W3C(7)" : "W3C");
2426  }
2427  else if (INFILE(_LT_OGC)) {
2428  INTERESTING("OGC");
2429  }
2430  else {
2431  INTERESTING(lDebug ? "W3C-style(7)" : "W3C-style");
2432  }
2433  lmem[_fW3C] = 1;
2434  }
2435  else if (INFILE(_LT_W3Cref1)) {
2436  INTERESTING(lDebug ? "W3C(ref1)" : "W3C");
2437  lmem[_fW3C] = 1;
2438  }
2439  else if (INFILE(_LT_W3Cref2)) {
2440  INTERESTING(lDebug ? "W3C(ref2)" : "W3C");
2441  lmem[_fW3C] = 1;
2442  }
2443  else if (INFILE(_LT_W3Cref3)) {
2444  INTERESTING(lDebug ? "W3C(ref3)" : "W3C");
2445  lmem[_fW3C] = 1;
2446  }
2447  else if (INFILE(_LT_W3Cref4)) {
2448  INTERESTING(lDebug ? "W3C(ref4)" : "W3C");
2449  lmem[_fW3C] = 1;
2450  }
2451  else if (URL_INFILE(_URL_W3C_20021231)) {
2452  INTERESTING(lDebug ? "W3C-20021231(url)" : "W3C");
2453  lmem[_fW3C] = 1;
2454  }
2455  else if (URL_INFILE(_URL_W3C_IP)) {
2456  INTERESTING(lDebug ? "W3C-IP(url)" : "W3C-IP");
2457  lmem[_fW3C] = 1;
2458  }
2459  else if (URL_INFILE(_URL_W3C)) {
2460  INTERESTING(lDebug ? "W3C(url)" : "W3C");
2461  lmem[_fW3C] = 1;
2462  }
2463  else if (!lmem[_mMIT] && INFILE(_LT_MIT_3)) {
2464  if (INFILE(_LT_NTP_0)) {
2465  INTERESTING("NTP-0");
2466  }
2467  else if (mCR_MIT()) {
2468  INTERESTING(lDebug ? "MIT(8)" : "MIT");
2469  }
2470  else {
2471  INTERESTING(lDebug ? "MIT-style(6)" : "MIT-style");
2472  }
2473  lmem[_mMIT] = 1;
2474  }
2475  else if (!lmem[_mMIT] && INFILE(_LT_MIT_4)) {
2476  if (mCR_MIT()) {
2477  INTERESTING(lDebug ? "MIT(9)" : "MIT");
2478  }
2479  else if (!lmem[_mISC] && mCR_FSF()) {
2480  INTERESTING(lDebug ? "FSF(7)" : "FSF");
2481  }
2482  else if (!lmem[_mISC]) {
2483  INTERESTING(lDebug ? "MIT-style(13)" : "MIT-style");
2484  }
2485  lmem[_mMIT] = 1;
2486  }
2487  else if (!lmem[_mMIT] && INFILE(_LT_MIT_8)) {
2488  if (INFILE(_CR_VIXIE)) {
2489  INTERESTING("Vixie");
2490  }
2491  else if (INFILE(_LT_0BSD)) {
2492  INTERESTING("0BSD");
2493  }
2494  else if (mCR_MIT()) {
2495  INTERESTING(lDebug ? "MIT(10)" : "MIT");
2496  }
2497  else if (HASTEXT(_TEXT_TU_BERLIN, 0) && HASTEXT(_LT_FREE_87,0)) {
2498  INTERESTING("TU-Berlin-2.0");
2499  }
2500  else {
2501  INTERESTING(lDebug ? "MIT-style(8)" : "MIT-style");
2502  }
2503  lmem[_mMIT] = 1;
2504  }
2505  else if (INFILE(_LT_MIT_9)) {
2506  if (INFILE(_CR_SLEEPYCAT)) {
2507  MEDINTEREST(lDebug ? "Sleepycat(2)" : "Sleepycat");
2508  }
2509  else if (INFILE(_CR_BSDCAL)) {
2510  INTERESTING(lDebug ? "BSD(mit)" : "BSD");
2511  lmem[_fBSD] = 1;
2512  }
2513  else if (INFILE(_CR_SUN)) {
2514  INTERESTING(lDebug ? "SUN(mit)" : "SUN");
2515  lmem[_fBSD] = 1;
2516  }
2517  else if (!lmem[_mMIT] && mCR_MIT()) {
2518  INTERESTING(lDebug ? "MIT(11)" : "MIT");
2519  lmem[_mMIT] = 1;
2520  }
2521  else if (!lmem[_mMIT]) {
2522  /*
2523  * Tcl/Tk license has MIT phrase
2524  */
2525  if (INFILE(_LT_TCL)) {
2526  INTERESTING("TCL");
2527  lmem[_fTCL] = 1;
2528  }
2529  else {
2530  INTERESTING(lDebug ? "MIT-style(9)" : "MIT-style");
2531  lmem[_mMIT] = 1;
2532  }
2533  }
2534  }
2535  else if (INFILE(_LT_MIT_10)) {
2536  if (!lmem[_mMIT] && mCR_MIT()) {
2537  INTERESTING(lDebug ? "MIT(12)" : "MIT");
2538  lmem[_mMIT] = 1;
2539  }
2540  else {
2541  INTERESTING(lDebug ? "MIT-style(10)" : "MIT-style");
2542  lmem[_mMIT] = 1;
2543  }
2544  }
2545  else if ((INFILE(_LT_MIROS_PREAMBLE) || INFILE(_TITLE_MIROS)) && INFILE(_LT_MIT_11)) {
2546  INTERESTING(lDebug ? "MIT-style(MirOS)" : "MirOS");
2547  lmem[_mMIT] = 1;
2548  }
2549  else if (INFILE(_LT_MIT_11)) {
2550  INTERESTING(lDebug ? "MIT-style(11)" : "MIT-style");
2551  lmem[_mMIT] = 1;
2552  }
2553  else if (!lmem[_mMIT] && INFILE(_LT_MITDOC)) {
2554  if (mCR_MIT()) {
2555  INTERESTING(lDebug ? "MIT(13)" : "MIT");
2556  }
2557  else {
2558  INTERESTING(lDebug ? "MIT-style(12)" : "MIT-style");
2559  }
2560  lmem[_mMIT] = 1;
2561  }
2562  else if (!lmem[_mMIT] && INFILE(_LT_MIT_0) && NOT_INFILE(_LT_ECL)) {
2563  INTERESTING(lDebug ? "MIT(0)" : "MIT-style");
2564  lmem[_mMIT] = 1;
2565  }
2566  else if (INFILE(_LT_MIT_14)) {
2567  INTERESTING(lDebug ? "MIT-style(14)" : "MIT-style");
2568  lmem[_mMIT] = 1;
2569  }
2570  else if (INFILE(_LT_MIT_15)) {
2571  INTERESTING(lDebug ? "MIT-style(15)" : "ISC-style");
2572  lmem[_mMIT] = 1;
2573  }
2574  else if (INFILE(_LT_MPL_OR_MITX)) {
2575  if (!lmem[_mMPL]) {
2576  cp = MPLVERS();
2577  INTERESTING(lDebug ? "MPL(with-MIT)" : cp);
2578  lmem[_mMPL] = 1;
2579  }
2580  if (!lmem[_mMIT]) {
2581  INTERESTING(lDebug ? "MIT(with-MPL)" : "MIT");
2582  lmem[_mMIT] = 1;
2583  }
2584  }
2585  else if (!lmem[_mMIT] && (URL_INFILE(_URL_MIT) || URL_INFILE(_URL_MIT_ROCK))) {
2586  INTERESTING(lDebug ? "MIT(url)" : "MIT");
2587  lmem[_mMIT] = 1;
2588  }
2589  else if (HASTEXT(_TEXT_TU_BERLIN, 0) && HASTEXT(_LT_FREE_87,0)) {
2590  INTERESTING("TU-Berlin-1.0");
2591  }
2592  else if (INFILE(_LT_NIST_1) && INFILE(_LT_NIST_2)) {
2593  INTERESTING(lDebug ? "NIST" : "MIT-style");
2594  }
2595  else if (INFILE(_LT_FSFAP)) {
2596  INTERESTING("FSFAP");
2597  }
2599  /*
2600  * Generic CopyLeft licenses
2601  */
2602  if (INFILE(_LT_COPYLEFT_1)) {
2603  INTERESTING("CopyLeft[1]");
2604  }
2605  else if (INFILE(_LT_COPYLEFT_2)) {
2606  INTERESTING("CopyLeft[2]");
2607  }
2609  /*
2610  * OpenContent license
2611  */
2612  if (INFILE(_LT_OPENCONTENT)) {
2613  if (INFILE(_TITLE_OPENCL10)) {
2614  INTERESTING("OCL-1.0");
2615  }
2616  else if (INFILE(_TITLE_OPENCL)) {
2617  INTERESTING("OCL");
2618  }
2619  else {
2620  INTERESTING("OCL-style");
2621  }
2622  }
2624  /*
2625  * jpeg/netpbm and png/zlib and others...
2626  */
2627  if (INFILE(_TITLE_ZLIB)) {
2628  INTERESTING("Zlib");
2629  }
2630  else if (INFILE (_LT_TRUECRYPT_30)) {
2631  INTERESTING("TrueCrypt-3.0");
2632  }
2633  else if (INFILE(_TITLE_LIBPNG)) {
2634  INTERESTING("Libpng");
2635  }
2636  /* IJG */
2637  else if (INFILE(_LT_JPEG_1)) {
2638  INTERESTING(lDebug ? "JPEG(1)" : "IJG");
2639  lmem[_fIJG] = 1;
2640  }
2641  else if (INFILE(_LT_JPEG_2) && HASTEXT(_TITLE_IJG_2, 0)) {
2642  INTERESTING(lDebug ? "JPEG(2)" : "IJG");
2643  lmem[_fIJG] = 1;
2644  }
2645  /* Zlib */
2646  else if (INFILE(_SPDX_zlib_acknowledgement)) {
2647  INTERESTING("zlib-acknowledgement");
2648  }
2649  else if (!lmem[_fREAL] && (INFILE(_SPDX_Zlib))) {
2650  INTERESTING("Zlib");
2651  }
2652  else if (INFILE(_LT_PNG_ZLIB_1) && HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) && HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED) && HASTEXT(_LT_PNG_ZLIB_CLAUSE_3, 0)) {
2653  INTERESTING(lDebug ? "ZLIB(1)" : "Zlib");
2654  }
2655  else if (INFILE(_LT_PNG_ZLIBref4) && NOT_INFILE(_LT_PNG_ZLIBref4_EXHIBIT)) {
2656  INTERESTING(lDebug ? "ZLIB(6)" : "Zlib");
2657  }
2658  else if (!lmem[_fW3C] && INFILE(_LT_PNG_ZLIB_2)) {
2659  if (INFILE(_LT_libmng_2007_Clause_1)) {
2660  if (HASTEXT(_LT_libmng_2007_1, 0)) {
2661  INTERESTING("libmng-2007");
2662  }
2663  else if (INFILE(_LT_libpng_20_Clause_1)) {
2664  INTERESTING("libpng-2.0");
2665  }
2666  }
2667  else {
2668  INTERESTING(lDebug ? "PNG/ZLIB(2)" : "Libpng");
2669  }
2670  }
2671  else if (INFILE(_LT_PNG_ZLIBref1)) {
2672  INTERESTING(lDebug ? "ZLIB(3)" : "Zlib");
2673  }
2674  else if (INFILE(_LT_PNG_ZLIBref2)) {
2675  INTERESTING(lDebug ? "ZLIB(4)" : "Zlib");
2676  }
2677  else if (INFILE(_LT_PNG_ZLIBref3)) { /* might be zlib/libpng license, not sure */
2678  INTERESTING(lDebug ? "ZLIB(5)" : "Zlib-possibility");
2679  }
2680  else if (!LVAL(_TEXT_GNU_LIC_INFO) && (URL_INFILE(_URL_ZLIB_1) || URL_INFILE(_URL_ZLIB_2))) {
2681  INTERESTING(lDebug ? "ZLIB(url)" : "Zlib");
2682  }
2683 
2684  if (INFILE(_LT_INFO_ZIP) || URL_INFILE(_URL_INFO_ZIP)) {
2685  INTERESTING("Info-ZIP");
2686  }
2688  /*
2689  * IETF (primarily docs, RFCs, and protocol/standard proposals) . This
2690  * one is a little strange as text-formatters that print this license
2691  * will occasionally split the text across a page boundary. Here we
2692  * look for 2 separate footprints.
2693  */
2694  if (INFILE(_LT_IETF_1) || INFILE(_LT_IETF_2) || INFILE(_LT_IETF_3) ||
2695  INFILE(_LT_IETF_4)) {
2696  if (mCR_IETF()) {
2697  INTERESTING("IETF");
2698  }
2699  else if (INFILE(_LT_IETF_5)) {
2700  INTERESTING("IETF");
2701  }
2702  else if (HASTEXT(_LT_IETF_7, 0)) {
2703  INTERESTING("IETF");
2704  }
2705  else if (INFILE(_CR_OASIS)) {
2706  INTERESTING("OASIS");
2707  }
2708  else {
2709  INTERESTING("IETF-style");
2710  }
2711  }
2712  /*
2713  * IETF Trust's Legal Provisions
2714  */
2715  else if (INFILE(_LT_IETF_6)) {
2716  INTERESTING("IETF");
2717  }
2718  /*
2719  * Contributions to IETF Standard Process
2720  */
2721  else if (INFILE(_LT_IETF_7)) {
2722  INTERESTING("IETF-contribution");
2723  }
2725  /*
2726  * CDDL
2727  */
2728  if (INFILE(_PHR_CDDL_1) || HASTEXT(_PHR_CDDL_2, REG_EXTENDED)) {
2729  cp = CDDLVERS();
2730  INTERESTING(cp);
2731  lmem[_mCDDL] = 1;
2732  }
2734  /*
2735  * MPL (Mozilla)
2736  * ... Sun SISSL and one Mozilla licensing derivative share wording
2737  */
2738  if (!lmem[_fREAL] && NOT_INFILE(_LT_CPALref) && NOT_INFILE(_TITLE_GSOAP) &&
2739  (INFILE(_LT_MPL_OR) || INFILE(_TITLE_MPL_ref))) {
2740  cp = MPLVERS(); /* NPL, too */
2741  INTERESTING(lDebug ? "MPL/NPL#2" : cp);
2742  lmem[_mMPL] = 1;
2743  }
2744  if (INFILE(_LT_CPALref)) {
2745  if (INFILE(_TITLE_CPAL10)) {
2746  INTERESTING(lDebug ? "CPAL_v1.0(#2)" : "CPAL-1.0");
2747  lmem[_mMPL] = 1;
2748  lmem[_fATTRIB] = 1;
2749  }
2750  else if (INFILE(_TITLE_CPAL)) {
2751  INTERESTING(lDebug ? "CPAL(#2)" : "CPAL");
2752  lmem[_mMPL] = 1;
2753  lmem[_fATTRIB] = 1;
2754  }
2755  }
2756  else if (INFILE(_LT_CPAL_V1_ref)) {
2757  INTERESTING(lDebug ? "CPAL_v1.0(#3)" : "CPAL-1.0");
2758  lmem[_mMPL] = 1;
2759  lmem[_fATTRIB] = 1;
2760  }
2761  if (!lmem[_mMPL] && INFILE(_LT_MPL_2)) {
2762  if (INFILE(_TITLE_SISSL)) {
2763  cp = SISSLVERS();
2764  INTERESTING(lDebug ? "SISSL(MPL)" : cp);
2765  lmem[_mSUN] = 1;
2766  }
2767  else if (INFILE(_TITLE_SUN_PL10)) {
2768  INTERESTING("SPL-1.0");
2769  lmem[_mSUN] = 1;
2770  }
2771  else if (INFILE(_TITLE_SUN_PL)) {
2772  INTERESTING("SPL");
2773  lmem[_mSUN] = 1;
2774  }
2775  else if (INFILE(_TITLE_IDPL_V10)) {
2776  INTERESTING("IDPL-1.0");
2777  lmem[_mMPL] = 1;
2778  }
2779  else if (INFILE(_TITLE_IDPL)) {
2780  INTERESTING("IDPL");
2781  lmem[_mMPL] = 1;
2782  }
2783  else if (INFILE(_TITLE_INTERBASE)) {
2784  INTERESTING("Interbase-1.0");
2785  lmem[_mMPL] = 1;
2786  }
2787  else if (INFILE(_TITLE_NETIZEN_V10)) {
2788  INTERESTING("NOSL-1.0");
2789  lmem[_mMPL] = 1;
2790  }
2791  else if (INFILE(_TITLE_NETIZEN)) {
2792  INTERESTING(lDebug ? "NOSL(#1)" : "NOSL");
2793  lmem[_mMPL] = 1;
2794  }
2795  else if (INFILE(_TITLE_TPL10)) {
2796  INTERESTING(lDebug ? "TPL(v1.0#1)" : "MPL.TPL-1.0");
2797  lmem[_mMPL] = 1;
2798  }
2799  else if (INFILE(_TITLE_TPL)) {
2800  INTERESTING(lDebug ? "TPL(#1)" : "MPL.TPL");
2801  lmem[_mMPL] = 1;
2802  }
2803  else if (INFILE(_TITLE_GSOAP_V13)) {
2804  INTERESTING("gSOAP-1.3b");
2805  lmem[_mGSOAP] = 1;
2806  }
2807  else if (INFILE(_TITLE_GSOAP)) {
2808  INTERESTING("gSOAP");
2809  lmem[_mGSOAP] = 1;
2810  }
2811  else if (INFILE(_TITLE_FLASH2XML10)) {
2812  INTERESTING("Flash2xml-1.0");
2813  }
2814  else if (INFILE(_TITLE_NOKIA10A)) {
2815  INTERESTING("Nokia");
2816  lmem[_mMPL] = 1;
2817  }
2818  else if (INFILE(_LT_NOKIA)) {
2819  INTERESTING("Nokia");
2820  lmem[_mMPL] = 1;
2821  }
2822  else if (INFILE(_TITLE_OPENPL10)) {
2823  INTERESTING("OPL-1.0");
2824  }
2825  else if (INFILE(_TITLE_SNIA_V11)) {
2826  INTERESTING("SNIA-1.1");
2827  }
2828  else if (INFILE(_TITLE_SNIA_V10)) {
2829  INTERESTING("SNIA-1.0");
2830  }
2831  else if (INFILE(_TITLE_CPAL10)) {
2832  INTERESTING(lDebug ? "CPAL_v1.0(#1)" : "CPAL-1.0");
2833  lmem[_mMPL] = 1;
2834  lmem[_fATTRIB] = 1;
2835  }
2836  else if (INFILE(_TITLE_CPAL)) {
2837  INTERESTING(lDebug ? "CPAL(#1)" : "CPAL");
2838  lmem[_mMPL] = 1;
2839  lmem[_fATTRIB] = 1;
2840  }
2841  else if (HASTEXT(_TEXT_MOZNET, REG_EXTENDED)) {
2842  if (INFILE(_TITLE_SUGARCRM_PL)) {
2843  INTERESTING("SugarCRM-1.1.3");
2844  lmem[_mMPL] = 1;
2845  lmem[_fATTRIB] = 1;
2846  }
2847  else if (!lmem[_mMPL] && !lmem[_fREAL] && INFILE(_TITLE_MOZNET_PL)) {
2848  cp = MPLVERS(); /* NPL, too */
2849  INTERESTING(lDebug ? "MPL/NPL#1" : cp);
2850  lmem[_mMPL] = 1;
2851  }
2852  }
2853  else if (INFILE(_TITLE_RHeCos_V11)) {
2854  INTERESTING("RHeCos-1.1");
2855  }
2856  else if (INFILE(_TITLE_CYGNUS_ECOS_V10)) {
2857  INTERESTING("Cygnus-eCos-1.0");
2858  }
2859  else if (INFILE(_TITLE_H2_V10)) {
2860  INTERESTING("H2-1.0");
2861  }
2862  else {
2863  if (!lmem[_mCDDL]) {
2864  INTERESTING("MPL-style");
2865  lmem[_mMPL] = 1;
2866  }
2867  }
2868  }
2869  else if (!lmem[_mMPL] && (INFILE(_LT_NPLref) || INFILE(_LT_NPL_1))) {
2870  cp = MPLVERS(); /* NPL, too */
2871  INTERESTING(lDebug ? "MPL/NPL#3" : cp);
2872  lmem[_mMPL] = 1;
2873  }
2874  else if (!lmem[_mMPL] && INFILE(_LT_MPLref1)) {
2875  cp = MPLVERS(); /* NPL, too */
2876  INTERESTING(lDebug ? "MPL/NPL-ref#1" : cp);
2877  lmem[_mMPL] = 1;
2878  }
2879  else if (!lmem[_mMPL] && INFILE(_LT_IDPLref)) {
2880  if (INFILE(_TITLE_IDPL_V10)) {
2881  INTERESTING(lDebug ? "IDPL-v1(ref)" : "IDPL-1.0");
2882  }
2883  else {
2884  INTERESTING(lDebug ? "IDPL(ref)" : "IDPL");
2885  }
2886  lmem[_mMPL] = 1;
2887  }
2888  else if (!lmem[_mMPL] && !lmem[_mLIBRE] && !lmem[_fREAL] &&
2889  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_MPLref2)) {
2890  cp = MPLVERS(); /* NPL, too */
2891  INTERESTING(lDebug ? "MPL/NPL-ref#2" : cp);
2892  lmem[_mMPL] = 1;
2893  }
2894  else if (!lmem[_mMPL] && !lmem[_mLIBRE] && !lmem[_fREAL] &&
2895  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_TITLE_MOZNET_PL)) {
2896  cp = MPLVERS(); /* NPL, too */
2897  INTERESTING(lDebug ? "MPL/NPL#4" : cp);
2898  lmem[_mMPL] = 1;
2899  }
2900  else if (!lmem[_mMPL] && INFILE(_TITLE_NETSCAPE_EULA)) {
2901  INTERESTING("NPL-EULA");
2902  lmem[_mMPL] = 0;
2903  }
2904  else if (INFILE(_LT_NPL_2)) {
2905  INTERESTING(lDebug ? "NPL(#1)" : "NPL");
2906  lmem[_mMPL] = 0;
2907  }
2908  else if (INFILE(_TITLE_OPENPL)) {
2909  INTERESTING(lDebug ? "OPL(title)" : "OPL-style");
2910  }
2912  /*
2913  * Microsoft licenses: open and proprietary/EULA
2914  */
2915  if (INFILE(_LT_MSCORP_SSLref)) {
2916  INTERESTING(lDebug ? "MS-SSL(ref)" : "MS-SSL");
2917  lmem[_fMSCORP] = 1;
2918  }
2919  if (INFILE(_LT_MSCORP_PL)) {
2920  int ms_l = INFILE(_LT_MSCORP_LIMITED);
2921  int ms_r = INFILE(_LT_MSCORP_RL);
2922  if (ms_r && ms_l) {
2923  INTERESTING("MS-LRL");
2924  }
2925  else if (ms_r) {
2926  INTERESTING(lDebug ? "MS-RL(#1)" : "MS-RL");
2927  }
2928  else if (ms_l) {
2929  INTERESTING("MS-LPL");
2930  }
2931  else {
2932  INTERESTING(lDebug ? "MS-PL(#1)" : "MS-PL");
2933  }
2934  }
2935  else if (INFILE(_LT_MSCORP_LIMITEDref1)) {
2936  INTERESTING("MS-LPL");
2937  lmem[_fMSCORP] = 1;
2938  }
2939 
2940  if (INFILE(_TEXT_MICROSOFT)) {
2941  if (INFILE(_LT_MSCORP_INDEMNIFY)) {
2942  INTERESTING("MS-indemnity");
2943  lmem[_fMSCORP] = 1;
2944  }
2945  else if (INFILE(_LT_MSCORP_IP_1)) {
2946  INTERESTING(lDebug ? "MS-IP(1)" : "MS-IP");
2947  lmem[_fMSCORP] = 1;
2948  }
2949  else if (INFILE(_LT_MSCORP_IP_2)) {
2950  INTERESTING(lDebug ? "MS-IP(2)" : "MS-IP");
2951  lmem[_fMSCORP] = 1;
2952  }
2953  else if (INFILE(_LT_MSCORP_PLref1)) {
2954  INTERESTING(lDebug ? "MS-PL(ref1)" : "MS-PL");
2955  lmem[_fMSCORP] = 1;
2956  }
2957  else if (INFILE(_LT_MSCORP_PLref2)) {
2958  INTERESTING(lDebug ? "MS-PL(ref2)" : "MS-PL");
2959  lmem[_fMSCORP] = 1;
2960  }
2961  else if (INFILE(_LT_MSCORP_PLref3)) {
2962  INTERESTING(lDebug ? "MS-PL(ref3)" : "MS-PL");
2963  lmem[_fMSCORP] = 1;
2964  }
2965  else if (INFILE(_LT_MSCORP_RLref)) {
2966  INTERESTING(lDebug ? "MS-RL(ref)" : "MS-RL");
2967  lmem[_fMSCORP] = 1;
2968  }
2969  else if (INFILE(_LT_MSCORP_REFLIC)) {
2970  INTERESTING("MRL");
2971  lmem[_fMSCORP] = 1;
2972  }
2973  else if (INFILE(_LT_MSCORP_EULA_1) ||
2974  INFILE(_TITLE_MSCORP_EULA)) {
2975  INTERESTING(lDebug ? "MS-EULA(1)" : "MS-EULA");
2976  lmem[_fMSCORP] = 1;
2977  }
2978  else if (INFILE(_LT_MSCORP_EULA_2)) {
2979  INTERESTING(lDebug ? "MS-EULA(2)" : "MS-EULA");
2980  lmem[_fMSCORP] = 1;
2981  }
2982  else if (INFILE(_LT_MSCORP_EULA_3)) {
2983  INTERESTING(lDebug ? "MS-EULA(3)" : "MS-EULA");
2984  lmem[_fMSCORP] = 1;
2985  }
2986  else if (INFILE(_LT_MSCORP_EULA_4)) {
2987  INTERESTING(lDebug ? "MS-EULA(4)" : "MS-EULA");
2988  lmem[_fMSCORP] = 1;
2989  }
2990  else if (INFILE(_LT_MSCORP_EULA_5)) {
2991  INTERESTING(lDebug ? "MS-EULA(5)" : "MS-EULA");
2992  lmem[_fMSCORP] = 1;
2993  }
2994  else if (INFILE(_LT_MSCORP_EULA_6)) {
2995  INTERESTING(lDebug ? "MS-EULA(6)" : "MS-EULA");
2996  lmem[_fMSCORP] = 1;
2997  }
2998  else if (INFILE(_LT_MSCORP_1)) {
2999  INTERESTING(lDebug ? "MS(1)" : "Microsoft");
3000  lmem[_fMSCORP] = 1;
3001  }
3002  else if (INFILE(_LT_MSCORP_2)) {
3003  INTERESTING(lDebug ? "MS(2)" : "Microsoft");
3004  lmem[_fMSCORP] = 1;
3005  }
3006  else if (INFILE(_LT_MSCORP_3)) {
3007  INTERESTING(lDebug ? "MS(3)" : "Microsoft");
3008  lmem[_fMSCORP] = 1;
3009  }
3010  else if (INFILE(_LT_MSCORP_4)) {
3011  INTERESTING(lDebug ? "MS(4)" : "Microsoft");
3012  lmem[_fMSCORP] = 1;
3013  }
3014  else if (INFILE(_LT_MSCORP_5)) {
3015  INTERESTING(lDebug ? "MS(5)" : "Microsoft");
3016  lmem[_fMSCORP] = 1;
3017  }
3018  else if (INFILE(_LT_MSCORPref1)) {
3019  INTERESTING("Microsoft");
3020  lmem[_fMSCORP] = 1;
3021  }
3022  }
3024  /*
3025  * Santa Cruz Operation (SCO)
3026  */
3027  if (INFILE(_LT_SCO_COMM) && INFILE(_CR_SCO)) {
3028  INTERESTING("SCO.commercial");
3029  }
3031  /*
3032  * Zonealarm
3033  */
3034  if (INFILE(_LT_ZONEALARM) && INFILE(_TITLE_ZONEALARM_EULA)) {
3035  INTERESTING("ZoneAlarm-EULA");
3036  }
3038  /*
3039  * Ximian
3040  */
3041  if (HASTEXT(_TEXT_XIMIAN, 0)) {
3042  if (INFILE(_CR_XIMIAN)) {
3043  if (INFILE(_LT_XIMIAN)) {
3044  if (INFILE(_TITLE_XIMIANLOGO10)) {
3045  INTERESTING("Ximian-1.0");
3046  }
3047  else if (INFILE(_TITLE_XIMIANLOGO)) {
3048  INTERESTING("Ximian");
3049  }
3050  }
3051  }
3052  }
3054  /*
3055  * Xerox
3056  */
3057  if (HASTEXT(_TEXT_XEROX, 0)) {
3058  if (INFILE(_LT_XEROX_1) || INFILE(_LT_XEROX_2)) {
3059  if (INFILE(_CR_XEROX_1) || INFILE(_CR_XEROX_2)) {
3060  INTERESTING("Xerox");
3061  }
3062  else {
3063  INTERESTING("Xerox-style");
3064  }
3065  }
3066  }
3068  /*
3069  * Artifex Software
3070  */
3071  if (INFILE(_LT_ARTIFEX) && INFILE(_CR_ARTIFEX)) {
3072  INTERESTING("Artifex");
3073  }
3075  /*
3076  * AGE logic
3077  */
3078  if (INFILE(_LT_AGE) && INFILE(_CR_AGE)) {
3079  INTERESTING("AGE-Logic");
3080  }
3082  /*
3083  * OpenSSL
3084  */
3085  if (INFILE(_LT_OPENSSLref1) || INFILE(_LT_OPENSSLref2) ||
3086  INFILE(_LT_OPENSSLref3) || INFILE(_LT_OPENSSLref4) ||
3087  INFILE(_LT_OPENSSLref6) || INFILE(_LT_OPENSSLref7) ||
3088  INFILE(_LT_OPENSSLref8) ) {
3089  INTERESTING(lDebug ? "OpenSSL(ref)" : "OpenSSL");
3090  }
3091  else if (INFILE(_SPDX_OpenSSL) || INFILE(_URL_OPENSSL)) {
3092  INTERESTING(lDebug ? "OpenSSL(phr)" : "OpenSSL");
3093  }
3095  /*
3096  * Dual OpenSSL SSLeay
3097  */
3098  if (INFILE(_LT_COMBINED_OPENSSL_SSLEAY)) {
3099  INTERESTING("OpenSSL");
3100  INTERESTING("SSLeay");
3101  }
3103  /*
3104  * Ruby. Ruby is a dual license which allows distribution also under GPL.
3105  * GPL was earlier recognized beside Ruby here but GPL was not identified
3106  * in all Ruby cases. Therefore GPL statements have bee removed.
3107  */
3108  if (INFILE(_LT_RUBY)) {
3109  INTERESTING("Ruby");
3110  lmem[_fRUBY] = 1;
3111  }
3112  else if (INFILE(_LT_RUBYref1)) {
3113  INTERESTING(lDebug ? "Ruby(ref1)" : "Ruby");
3114  }
3115  else if (INFILE(_LT_RUBYref2)) {
3116  INTERESTING(lDebug ? "Ruby(ref2)" : "Ruby");
3117  }
3118  else if (INFILE(_LT_RUBYref3)) {
3119  INTERESTING(lDebug ? "Ruby(ref3)" : "Ruby");
3120  }
3121  else if (INFILE(_LT_RUBYref4)) {
3122  INTERESTING(lDebug ? "Ruby(ref4)" : "Ruby");
3123  }
3124  else if (INFILE(_LT_RUBYref5)) {
3125  INTERESTING(lDebug ? "Ruby(ref5)" : "Ruby");
3126  }
3127  else if (INFILE(_LT_RUBYref6)) {
3128  INTERESTING(lDebug ? "Ruby(ref6)" : "Ruby");
3129  }
3131  /*
3132  * Python and EGenix.com look a bit alike
3133  * Q: should all these Python rhecks be a family-check like OpenLDAP?
3134  */
3135  if (INFILE(_LT_EGENIX_COM)) {
3136  INTERESTING("eGenix");
3137  }
3138  else if (INFILE(_LT_PYTHON_4)) {
3139  INTERESTING("Python");
3140  lmem[_mPYTHON] = 1;
3141  }
3142  else if (!lmem[_mPYTHON] && lmem[_mPYTH_TEXT]) {
3143  if (INFILE(_LT_PYTHON_1) || INFILE(_LT_PYTHON_2)) {
3144  if (INFILE(_LT_CNRI_PYTHON_GPL)) {
3145  INTERESTING("CNRI-Python-GPL-Compatible");
3146  lmem[_mGPL] = 1;
3147  }
3148  else if (INFILE(_CR_PYTHON) || INFILE(_TITLE_PYTHON)) {
3149  cp = PYTHVERS();
3150  INTERESTING(lDebug ? "Python(1)" : cp);
3151  }
3152  else if (INFILE(_LT_CNRI_PYTHON_1)) {
3153  INTERESTING("CNRI-Python");
3154  }
3155  else if (INFILE(_LT_CNRI_JYTHON)) {
3156  INTERESTING("CNRI-Jython");
3157  }
3158  else {
3159  INTERESTING("Python-style");
3160  }
3161  lmem[_mPYTHON] = 1;
3162  }
3163  else if (INFILE(_SPDX_CNRI_Python_GPL_Compatible)) {
3164  INTERESTING("CNRI-Python-GPL-Compatible");
3165  }
3166  else if (INFILE(_SPDX_CNRI_Python)) {
3167  INTERESTING("CNRI-Python");
3168  }
3169  else if (INFILE(_LT_CNRI_PYTHON_2)) {
3170  INTERESTING("CNRI-Python");
3171  }
3172  else if (INFILE(_LT_PYTHON_3)) {
3173  cp = PYTHVERS();
3174  INTERESTING(lDebug ? "Python(4)" : cp);
3175  lmem[_mPYTHON] = 1;
3176  }
3177  else if (INFILE(_LT_PYTHONSTYLEref)) {
3178  cp = PYTHVERS();
3179  INTERESTING(lDebug ? "Python(ref1)" : "Python-style");
3180  lmem[_mPYTHON] = 1;
3181  }
3182  else if (!lmem[_mLIBRE] && (INFILE(_LT_PYTHONref1) ||
3183  INFILE(_LT_PYTHONref2))) {
3184  cp = PYTHVERS();
3185  INTERESTING(lDebug ? "Python(ref2)" : cp);
3186  lmem[_mPYTHON] = 1;
3187  }
3188  else if (!lmem[_mLIBRE] && !lmem[_fREAL] &&
3189  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_PYTHONref3)) {
3190  cp = PYTHVERS();
3191  INTERESTING(lDebug ? "Python(ref3)" : cp);
3192  lmem[_mPYTHON] = 1;
3193  }
3194  else if (!lmem[_mPYTHON] && URL_INFILE(_URL_PYTHON)) {
3195  cp = PYTHVERS();
3196  INTERESTING(lDebug ? "Python(url)" : cp);
3197  lmem[_mPYTHON] = 1;
3198  }
3199  else if (!lmem[_mPYTHON] && INFILE(_LT_PYTHON22ref)) {
3200  INTERESTING(lDebug ? "Python(22ref)" : "Python-2.2");
3201  lmem[_mPYTHON] = 1;
3202  }
3203  }
3205  /*
3206  * Intel
3207  */
3208  if (INFILE(_LT_INTEL) && NOT_INFILE(_LT_REAL_RPSL)) {
3209  INTERESTING(lDebug ? "Intel(8)" : "Intel");
3210  }
3211  else if (INFILE(_LT_INTEL_6)) {
3212  INTERESTING(lDebug ? "Intel(9)" : "Intel-other");
3213  }
3214  else if (INFILE(_LT_INTEL_7)) {
3215  INTERESTING(lDebug ? "Intel(10)" : "Intel-other");
3216  }
3217  else if (INFILE(_LT_INTEL_WLAN)) {
3218  INTERESTING("Intel-WLAN");
3219  }
3220  else if (INFILE(_LT_INTEL_ACPI)) {
3221  INTERESTING("Intel-ACPI");
3222  }
3223  else if (INFILE(_SPDX_Intel_ACPI)) {
3224  INTERESTING("Intel-ACPI");
3225  }
3226  else if (INFILE(_LT_ISSL_1) && INFILE(_LT_ISSL_2)) {
3227  INTERESTING("ISSL");
3228  }
3229  else if (!lmem[_fREAL] && INFILE(_SPDX_Intel)) {
3230  INTERESTING("Intel");
3231  }
3232  else if (HASTEXT(_TEXT_INTELCORP, 0)) {
3233  if (INFILE(_LT_INTEL_1)) {
3234  if (INFILE(_LT_INTEL_FW)) {
3235  INTERESTING(lDebug ? "Intel(2)" : "Intel-only-FW");
3236  }
3237  else {
3238  INTERESTING(lDebug ? "Intel(3)" : "Intel");
3239  }
3240  }
3241  else if (INFILE(_LT_INTEL_2)) {
3242  INTERESTING(lDebug ? "Intel(4)" : "Intel");
3243  }
3244  else if (INFILE(_LT_INTEL_3)) {
3245  INTERESTING(lDebug ? "Intel(5)" : "Intel");
3246  }
3247  else if (INFILE(_LT_INTEL_4)) {
3248  INTERESTING(lDebug ? "Intel(6)" : "Intel");
3249  }
3250  else if (INFILE(_LT_INTEL_RESTRICT)) {
3251  INTERESTING("Intel.RESTRICTED");
3252  }
3253  else if (INFILE(_LT_INTEL_BINARY) && HASTEXT(_TEXT_INTELCORPBINARY, 0) && HASTEXT(_TEXT_NOMODIFICATION, 0)) {
3254  INTERESTING("Intel-Binary");
3255  }
3256  }
3257  else if (INFILE(_LT_INTEL_5)) {
3258  INTERESTING(lDebug ? "CPL(Intel)" : "CPL");
3259  INTERESTING(lDebug ? "Intel(7)" : "Intel");
3260  }
3261  else if (INFILE(_LT_INTEL_EULA)) {
3262  INTERESTING("Intel-EULA");
3263  }
3265  /*
3266  * Bellcore
3267  */
3268  if (INFILE(_LT_BELLCORE)) {
3269  if (INFILE(_CR_BELLCORE)) {
3270  INTERESTING("Bellcore");
3271  }
3272  else {
3273  INTERESTING("Bellcore-style");
3274  }
3275  }
3277  /*
3278  * Purdue
3279  */
3280  if (INFILE(_LT_PURDUE) && INFILE(_CR_PURDUE) && HASTEXT(_TEXT_ALTERED_SOURCE, REG_EXTENDED) && HASTEXT(_TEXT_ORIGIN, 0)) {
3281  INTERESTING("Purdue");
3282  /* flag is set to avoid Cisco-style detection */
3283  lmem[_fPURDUE] = 1;
3284  }
3286  /*
3287  * Cisco systems
3288  */
3289  if (!lmem[_fPURDUE] && INFILE(_LT_CISCO)) {
3290  if (HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) &&
3291  HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED) &&
3292  HASTEXT(_LT_PNG_ZLIB_CLAUSE_3, 0)) {
3293  if (INFILE(_LT_Spencer_86_94_CLAUSE_1) && INFILE(_LT_Spencer_94_CLAUSE_2)) {
3294  INTERESTING("Spencer-94");
3295  }
3296  else {
3297  INTERESTING("Zlib-style");
3298  }
3299  }
3300  else if (INFILE(_CR_CISCO)) {
3301  INTERESTING("Cisco");
3302  }
3303  else {
3304  INTERESTING("Cisco-style");
3305  }
3306  }
3308  /*
3309  * HP
3310  */
3311  if (INFILE(_LT_HP_DEC)) {
3312  if (mCR_HP()) {
3313  INTERESTING(lDebug ? "HP(8)" : "HP");
3314  }
3315  else if (INFILE(_CR_ADOBE)) {
3316  INTERESTING(lDebug ? "Adobe(8)" : "Adobe");
3317  }
3318  else if (INFILE(_LT_GNUPLOT_1) && INFILE(_LT_GNUPLOT_2)) {
3319  INTERESTING("gnuplot");
3320  }
3321  else {
3322  INTERESTING(lDebug ? "HP-DEC-style(1)" : "HP-DEC-style");
3323  }
3324  }
3325  else if (HASTEXT(_TEXT_HP, REG_EXTENDED)) {
3326  if (INFILE(_LT_HP_1)) {
3327  INTERESTING(lDebug ? "HP(2)" : "HP");
3328  }
3329  else if (INFILE(_LT_HP_3) && INFILE(_LT_HP_snmp_pp)) {
3330  INTERESTING(lDebug ? "HP(3)" : "hp-snmp-pp");
3331  }
3332  else if (INFILE(_LT_HP_4)) {
3333  INTERESTING(lDebug ? "HP(4)" : "HP");
3334  }
3335  else if (INFILE(_LT_HP_5)) {
3336  INTERESTING(lDebug ? "HP(5)" : "HP");
3337  }
3338  else if (INFILE(_LT_HP_6)) {
3339  INTERESTING(lDebug ? "HP(6)" : "HP");
3340  }
3341  else if (INFILE(_LT_HP_7)) {
3342  INTERESTING(lDebug ? "HP(7)" : "HP");
3343  }
3344  else if (INFILE(_LT_COMPAQ_1)) {
3345  INTERESTING(lDebug ? "Compaq(1)" : "HP-Compaq");
3346  }
3347  else if (INFILE(_LT_HP_EULA1)) {
3348  INTERESTING(lDebug ? "HP-EULA(1)" : "HP-EULA");
3349  }
3350  else if (INFILE(_LT_HP_EULA2)) {
3351  INTERESTING(lDebug ? "HP-EULA(2)" : "HP-EULA");
3352  }
3353  else if (INFILE(_LT_HP_EULA3)) {
3354  INTERESTING(lDebug ? "HP-EULA(3)" : "HP-EULA");
3355  }
3356  else if (INFILE(_LT_HP_EULA4)) {
3357  INTERESTING(lDebug ? "HP-EULA(4)" : "HP-EULA");
3358  }
3359  else if (INFILE(_LT_COMPAQ_EULA)) {
3360  INTERESTING(lDebug ? "Compaq(EULA)" : "HP-Compaq");
3361  }
3362  else if (INFILE(_LT_HP_PROPRIETARY_1)) {
3363  INTERESTING(lDebug ? "HP-prop(1)" : "HP-Proprietary");
3364  }
3365  else if (INFILE(_LT_HP_PROPRIETARY_2)) {
3366  INTERESTING(lDebug ? "HP-prop(2)" : "HP-Proprietary");
3367  }
3368  else if (INFILE(_LT_HP_PROPRIETARY_3)) {
3369  INTERESTING(lDebug ? "HP-prop(3)" : "HP-Proprietary");
3370  }
3371  else if (INFILE(_LT_HP_IBM_1)) {
3372  INTERESTING(lDebug ? "HP+IBM(1)" : "HP+IBM");
3373  }
3374  else if (INFILE(_LT_HP_IBM_2)) {
3375  INTERESTING(lDebug ? "HP+IBM(2)" : "HP+IBM");
3376  }
3377  else if (!lmem[_mHP] && INFILE(_CR_DEC) && INFILE(_LT_DEC_1)) {
3378  INTERESTING(lDebug ? "HP-DEC(3)" : "HP-DEC");
3379  lmem[_mHP] = 1;
3380  }
3381  else if (!lmem[_mHP] && INFILE(_CR_DEC) && INFILE(_LT_DEC_2)) {
3382  INTERESTING(lDebug ? "HP-DEC(4)" : "HP-DEC");
3383  lmem[_mHP] = 1;
3384  }
3385  else if (INFILE(_LT_EDS_1) && INFILE(_CR_EDS)) {
3386  INTERESTING(lDebug ? "HP-EDS(1)" : "HP");
3387  }
3388  else if (INFILE(_LT_EDS_2) && INFILE(_CR_EDS)) {
3389  INTERESTING(lDebug ? "HP-EDS(2)" : "HP");
3390  }
3391  }
3392  else if (!lmem[_mHP] && INFILE(_LT_DEC_1)) {
3393  INTERESTING(lDebug ? "HP-DEC-style(2)" : "HP-DEC-style");
3394  }
3395  else if (!lmem[_mHP] && INFILE(_LT_DEC_2)) {
3396  INTERESTING(lDebug ? "HP-DEC-style(3)" : "HP-DEC-style");
3397  }
3398  else if (INFILE(_LT_HP_4)) {
3399  INTERESTING(lDebug ? "HP-style(1)" : "HP-style");
3400  }
3401  else if (INFILE(_LT_COMPAQ_1)) {
3402  INTERESTING(lDebug ? "HP-style(2)" : "HP-style");
3403  }
3404  else if (INFILE(_LT_EDS_1)) {
3405  INTERESTING(lDebug ? "HP-EDS(1#2)" : "HP");
3406  }
3407  else if (INFILE(_LT_EDS_2)) {
3408  INTERESTING(lDebug ? "HP-EDS(2#2)" : "HP");
3409  }
3411  /*
3412  * SUN Microsystems
3413  */
3414  if (!lmem[_mSUN] && (INFILE(_CR_SUN) || INFILE(_TEXT_MICROSYSTEMS))) {
3415  if (INFILE(_LT_SUN_PROPRIETARY) || INFILE(_LT_SUN_PROPRIETARY_2) || INFILE(_LT_SUN_PROPRIETARY_3)) {
3416  INTERESTING(lDebug ? "Sun(Prop)" : "Sun-Proprietary");
3417  lmem[_mSUN] = 1;
3418  }
3419  else if (INFILE(_LT_SUN_RPC)) {
3420  INTERESTING("Sun-RPC");
3421  lmem[_mSUN] = 1;
3422  }
3423  else if (INFILE(_LT_SUN_1)) {
3424  if (INFILE(_LT_SUN_FREE)) {
3425  INTERESTING(lDebug ? "Sun(Freeware)" : "Freeware");
3426  }
3427  else {
3428  INTERESTING(lDebug ? "Sun(3)" : "Sun");
3429  }
3430  lmem[_mSUN] = 1;
3431  }
3432  else if (INFILE(_LT_SUN_2)) {
3433  INTERESTING(lDebug ? "Sun(4)" : "Sun-Proprietary");
3434  lmem[_mSUN] = 1;
3435  }
3436  else if (INFILE(_LT_SUN_3)) {
3437  INTERESTING(lDebug ? "Sun(5)" : "Sun");
3438  lmem[_mSUN] = 1;
3439  }
3440  else if (INFILE(_LT_SUN_4)) {
3441  INTERESTING(lDebug ? "Sun(6)" : "Sun");
3442  lmem[_mSUN] = 1;
3443  }
3444  else if (INFILE(_LT_SUN_5)) {
3445  INTERESTING(lDebug ? "Sun(7)" : "Freeware");
3446  lmem[_mSUN] = 1;
3447  }
3448  else if (INFILE(_LT_SUN_6)) {
3449  INTERESTING(lDebug ? "Sun(8)" : "BSD-style");
3450  lmem[_mSUN] = 1;
3451  }
3452  else if (INFILE(_LT_SUN_NC)) {
3453  INTERESTING("Sun.Non-commercial");
3454  lmem[_mSUN] = 1;
3455  }
3456  else if (INFILE(_LT_SUNrestrict)) {
3457  INTERESTING("Sun.RESTRICTED");
3458  lmem[_mSUN] = 1;
3459  }
3460  else if (INFILE(_LT_SUN_BCLA_1) && INFILE(_TITLE_SUN_BCLA)) {
3461  INTERESTING(lDebug ? "BCLA(1)" : "Sun-BCLA");
3462  lmem[_mSUN] = 1;
3463  }
3464  else if (INFILE(_LT_SUN_BCLA_2)) {
3465  INTERESTING(lDebug ? "BCLA(2)" : "Sun-BCLA");
3466  lmem[_mSUN] = 1;
3467  }
3468  else if (INFILE(_LT_SUN_BCLAref)) {
3469  INTERESTING(lDebug ? "BCLA(ref)" : "Sun-BCLA");
3470  lmem[_mSUN] = 1;
3471  }
3472  else if (INFILE(_LT_SUN_ENTITLE)) {
3473  INTERESTING(lDebug ? "Sun(entitlement)" : "Sun");
3474  lmem[_mSUN] = 1;
3475  }
3476  else if (INFILE(_LT_SUN_ANYagreement)) {
3477  INTERESTING("Sun-EULA");
3478  lmem[_mSUN] = 1;
3479  }
3480  else if (INFILE(_LT_SUN_JAVA)) {
3481  INTERESTING("Sun-Java");
3482  lmem[_mSUN] = 1;
3483  }
3484  else if (INFILE(_LT_SUN_IP)) {
3485  INTERESTING("Sun-IP");
3486  lmem[_mSUN] = 1;
3487  lmem[_fIP] = 1;
3488  }
3489  else if (INFILE(_LT_SUN_SCA)) {
3490  INTERESTING("Sun-SCA");
3491  lmem[_mSUN] = 1;
3492  }
3493  else if (INFILE(_LT_SUN_SCSLref)) {
3494  if (INFILE(_TITLE_SCSL_V23)) {
3495  INTERESTING("SCSL-2.3");
3496  }
3497  else if (INFILE(_TITLE_SCSL_V30)) {
3498  INTERESTING("SCSL-3.0");
3499  }
3500  else {
3501  INTERESTING("SCSL");
3502  }
3503  lmem[_mSUN] = 1;
3504  }
3505  else if (INFILE(_TITLE_SUN_SCSL_TSA) &&
3506  INFILE(_LT_SUN_SCSL_TSA)) {
3507  if (INFILE(_TITLE_TSA_10)) {
3508  INTERESTING("SCSL-TSA-1.0");
3509  }
3510  else {
3511  INTERESTING("SCSL-TSA");
3512  }
3513  lmem[_mSUN] = 1;
3514  }
3515  else if (INFILE(_LT_SUN_SISSLref1)
3516  || INFILE(_LT_SUN_SISSLref2)) {
3517  cp = SISSLVERS();
3518  INTERESTING(lDebug ? "SISSL(ref#1)" : cp);
3519  lmem[_mSUN] = 1;
3520  }
3521  }
3522  else if (!lmem[_fREAL] && INFILE(_LT_SUN_PLref)) {
3523  INTERESTING(lDebug ? "Sun-PL(ref)" : "SPL");
3524  lmem[_mSUN] = 1;
3525  }
3526  else if (!lmem[_mSUN] && URL_INFILE(_URL_SUN_BINARY_V150)) {
3527  INTERESTING("Sun-BCLA-1.5.0");
3528  lmem[_mSUN] = 1;
3529  }
3530  else if (!lmem[_mSUN] && URL_INFILE(_URL_SUN_BINARY)) {
3531  INTERESTING(lDebug ? "BCLA(url)" : "Sun-BCLA");
3532  lmem[_mSUN] = 1;
3533  }
3534  else if (!lmem[_mSUN] && INFILE(_LT_SUN_GRAPHICS)) {
3535  INTERESTING(lDebug ? "Sun(8)" : "Sun");
3536  lmem[_mSUN] = 1;
3537  }
3538  else if (!lmem[_mSUN] && INFILE(_LT_SUN_GRAPHICS)) {
3539  INTERESTING(lDebug ? "Sun(9)" : "Sun");
3540  lmem[_mSUN] = 1;
3541  }
3542  else if ((!lmem[_mSUN] && INFILE(_LT_SUN_SISSLref1)) ||
3543  INFILE(_LT_SUN_SISSLref2)) {
3544  cp = SISSLVERS();
3545  INTERESTING(lDebug ? "SISSL(ref#2)" : cp);
3546  lmem[_mSUN] = 1;
3547  }
3548  else if (!lmem[_mSUN] && URL_INFILE(_URL_SISSL)) {
3549  cp = SISSLVERS();
3550  INTERESTING(lDebug ? "SISSL(url)" : cp);
3551  lmem[_mSUN] = 1;
3552  }
3554  if (INFILE(_LT_SUN_PRO)) {
3555  INTERESTING(lDebug ? "SunPro" : "Freeware");
3556  }
3558  /*
3559  * IBM
3560  */
3561  if (INFILE(_TEXT_IBM)) {
3562  if (INFILE(_LT_IBM_RECIP)) {
3563  INTERESTING("IBM-reciprocal");
3564  }
3565  else if (INFILE(_LT_IBM_4)) {
3566  INTERESTING(lDebug ? "IBM(4)" : "IBM-dhcp");
3567  }
3568  else if (INFILE(_LT_IBM_1)) {
3569  INTERESTING(lDebug ? "IBM(1)" : "MIT-style");
3570  }
3571  else if (INFILE(_LT_IBM_3)) {
3572  INTERESTING(lDebug ? "IBM(3)" : "MIT-style");
3573  }
3574  else if (INFILE(_LT_IBM_2)) {
3575  INTERESTING(lDebug ? "IBM(2)" : "IBM");
3576  }
3577  else if (INFILE(_LT_IBM_OWNER)) {
3578  INTERESTING(lDebug ? "IBM(4)" : "IBM");
3579  }
3580  else if (INFILE(_LT_IBM_JIKES)) {
3581  INTERESTING("IBM-JCL");
3582  }
3583  else if (INFILE(_LT_IBM_COURIER)) {
3584  INTERESTING("IBM-Courier");
3585  }
3586  else if (INFILE(_LT_IBM_EULA)) {
3587  INTERESTING(lDebug ? "IBM-EULA(1)" : "IBM-EULA");
3588  }
3589  else if (INFILE(_PHR_IBM_EULA)) {
3590  INTERESTING(lDebug ? "IBM-EULA(2)" : "IBM-EULA");
3591  }
3592  else if (INFILE(_LT_IBM_PIBS)) {
3593  INTERESTING("IBM-pibs");
3594  }
3595  else if (INFILE(_LT_IBM_AS_IS)) {
3596  INTERESTING("IBM-as-is");
3597  }
3598  }
3600  /*
3601  * Motorola
3602  */
3603  if (INFILE(_CR_MOT_1) || INFILE(_CR_MOT_2)) {
3604  if (INFILE(_LT_MOT_1)) {
3605  INTERESTING(lDebug ? "Motorola(1)" : "Motorola");
3606  }
3607  else if (INFILE(_LT_MOT_2)) {
3608  INTERESTING(lDebug ? "Motorola(2)" : "Motorola");
3609  }
3610  }
3611  if (HASTEXT(_TITLE_MOTOROLA_MOBILE, 0)) {
3612  INTERESTING("Motorola-Mobile-SLA");
3613  }
3615  /*
3616  * Java
3617  */
3618  if (INFILE(_LT_JAVA_WSDL4J)) {
3619  INTERESTING("Java-WSDL4J");
3620  }
3621  else if (INFILE(_LT_JAVA_WSDL_SCHEMA)) {
3622  INTERESTING("Java-WSDL-Schema");
3623  }
3624  else if (INFILE(_LT_JAVA_WSDL_POLICY)) {
3625  INTERESTING("Java-WSDL-Policy");
3626  }
3627  else if (INFILE(_LT_JAVA_WSDL_ENUM)) {
3628  INTERESTING("Java-WSDL-Spec");
3629  }
3630  else if (INFILE(_LT_MULTICORP_1)) {
3631  INTERESTING(lDebug ? "Java-Multi(1)" : "Java-Multi-Corp");
3632  }
3633  else if (INFILE(_LT_MULTICORP_2)) {
3634  INTERESTING(lDebug ? "Java-Multi(2)" : "Java-Multi-Corp");
3635  }
3637  /*
3638  * Mibble
3639  */
3640  if (INFILE(_LT_MIBBLE)) {
3641  if (INFILE(_TITLE_MIBBLE_28)) {
3642  INTERESTING("Mibble-2.8");
3643  }
3644  else {
3645  INTERESTING("Mibble");
3646  }
3647  }
3649  /*
3650  * Comtrol Corp
3651  */
3652  if (INFILE(_CR_COMTROL) && INFILE(_LT_COMTROL)) {
3653  INTERESTING("Comtrol");
3654  }
3656  /*
3657  * TrollTech
3658  */
3659  if (INFILE(_LT_TROLLTECH) && INFILE(_CR_TROLLTECH)) {
3660  INTERESTING("Trolltech");
3661  }
3662  else if (INFILE(_LT_QT_COMMref)) {
3663  INTERESTING("Qt.Commercial");
3664  }
3665  else if (INFILE(_LT_QT_PROPRIETARY) || INFILE(_TITLE_QT_PROPRIETARY)) {
3666  INTERESTING("Qt.Commercial");
3667  }
3669  /*
3670  * SNIA (Storage Network Industry) public license
3671  */
3672  if (!lmem[_mMPL] && !lmem[_mSUN] && INFILE(_LT_SNIA_PL)) {
3673  if (INFILE(_TITLE_SNIA_V11)) {
3674  INTERESTING("SNIA-1.1");
3675  }
3676  else if (INFILE(_TITLE_SNIA_V10)) {
3677  INTERESTING("SNIA-1.0");
3678  }
3679  else {
3680  INTERESTING("SNIA");
3681  }
3682  }
3683  else if (INFILE(_LT_SNIAref)) {
3684  if (INFILE(_TITLE_SNIA_V11)) {
3685  INTERESTING(lDebug ? "SNIA-1.1(ref)" : "SNIA-1.1");
3686  }
3687  else if (INFILE(_TITLE_SNIA_V10)) {
3688  INTERESTING(lDebug ? "SNIA-1.0(ref)" : "SNIA-1.0");
3689  }
3690  else {
3691  INTERESTING(lDebug ? "SNIA(ref)" : "SNIA");
3692  }
3693  }
3694  else if (URL_INFILE(_URL_SNIA_V11)) {
3695  INTERESTING(lDebug ? "SNIA-1.1(url)" : "SNIA-1.1");
3696  }
3697  else if (URL_INFILE(_URL_SNIA)) {
3698  INTERESTING(lDebug ? "SNIA(url)" : "SNIA");
3699  }
3701  /*
3702  * BEA
3703  */
3704  if (HASTEXT(_TEXT_BEASYS, 0)) {
3705  if (INFILE(_LT_BEA_1)) {
3706  INTERESTING(lDebug ? "BEA(1)" : "BEA");
3707  }
3708  else if (INFILE(_LT_BEA_2)) {
3709  INTERESTING(lDebug ? "BEA(2)" : "BEA");
3710  }
3711  }
3713  /*
3714  * ADOBE/FRAME
3715  */
3716  if (HASTEXT(_TEXT_ADOBE_FRAME, REG_EXTENDED)) {
3717  if (INFILE(_LT_ADOBE_1)) {
3718  INTERESTING(lDebug ? "Adobe(1)" : "Adobe");
3719  }
3720  else if (!lmem[_mMIT] && INFILE(_LT_ADOBE_2)) {
3721  INTERESTING(lDebug ? "Adobe(2)" : "Adobe");
3722  }
3723  else if (INFILE(_LT_ADOBE_3)) {
3724  INTERESTING(lDebug ? "Adobe(3)" : "Adobe");
3725  }
3726  else if (INFILE(_LT_ADOBE_4)) {
3727  INTERESTING(lDebug ? "Adobe(4)" : "Adobe-EULA");
3728  }
3729  else if (INFILE(_LT_ADOBE_5)) {
3730  INTERESTING(lDebug ? "Adobe(5)" : "Adobe-EULA");
3731  }
3732  else if (INFILE(_LT_ADOBE_6)) {
3733  INTERESTING(lDebug ? "Adobe(6)" : "Adobe-EULA");
3734  }
3735  else if (INFILE(_LT_ADOBE_7)) {
3736  INTERESTING(lDebug ? "Adobe(7)" : "Adobe-EULA");
3737  }
3738  else if (INFILE(_LT_FRAME)) {
3739  INTERESTING(lDebug ? "Adobe(Frame)" : "Adobe");
3740  }
3741  else if (INFILE(_LT_ADOBE_SRC) || INFILE(_TITLE_ADOBE_SRC)) {
3742  INTERESTING(lDebug ? "Adobe(src)" : "Adobe-2006");
3743  }
3744  else if (INFILE(_LT_ADOBE_DATA)) {
3745  INTERESTING(lDebug ? "Adobe(data)" : "Adobe");
3746  }
3747  else if (INFILE(_LT_ADOBE_EULA)) {
3748  INTERESTING("Adobe-EULA");
3749  }
3750  else if (INFILE(_LT_ADOBE_AFM)) {
3751  INTERESTING("APAFML");
3752  }
3753  else if (HASTEXT(_TITLE_ADOBE_DNG, 0)) {
3754  INTERESTING("Adobe-DNG");
3755  }
3756  else if (INFILE(_LT_ADOBE_AFMPARSE_1) && INFILE(_LT_ADOBE_AFMPARSE_2)) {
3757  INTERESTING("Afmparse");
3758  }
3759  else if (INFILE(_LT_ADOBE_OTHER)) {
3760  INTERESTING(lDebug ? "Adobe(other)" : "Adobe");
3761  }
3762  else if (INFILE(_LT_ADOBE_SUB)) {
3763  INTERESTING(lDebug ? "Adobe(sub)" : "Adobe");
3764  }
3765  }
3767  /*
3768  * Docbook and Open Source Metadata Framework
3769  */
3770  if (INFILE(_LT_DOCBOOK)) {
3771  if (HASTEXT(_TEXT_DOCBOOK, 0)) {
3772  INTERESTING("DOCBOOK");
3773  }
3774  else if (HASTEXT(_TEXT_METADATA, 0)) {
3775  INTERESTING("OMF");
3776  }
3777  else {
3778  INTERESTING("DOCBOOK-style");
3779  }
3780  }
3782  /*
3783  * MP3 decoder
3784  */
3785  if (INFILE(_LT_MPEG3)) {
3786  INTERESTING("MPEG3-decoder");
3787  }
3789  /*
3790  * Google
3791  */
3792  if (INFILE(_LT_GOOGLE_1)) {
3793  INTERESTING(lDebug ? "Google(1)" : "Google");
3794  }
3795  else if (INFILE(_LT_GOOGLE_2)) {
3796  INTERESTING(lDebug ? "Google(2)" : "Google");
3797  }
3799  /*
3800  * Mandriva
3801  */
3802  if (INFILE(_LT_MANDRIVA)) {
3803  INTERESTING("Mandriva");
3804  }
3806  /*
3807  * Irondoc
3808  */
3809  if (INFILE(_LT_IRONDOC)) {
3810  INTERESTING("IronDoc");
3811  }
3813  /*
3814  * Quarterdeck Office Systems
3815  */
3816  if (INFILE(_LT_QUARTERDECK) && INFILE(_CR_QUARTERDECK)) {
3817  INTERESTING("QuarterDeck");
3818  }
3820  /*
3821  * Electronic Book Technologies
3822  */
3823  if (INFILE(_LT_EBT)) {
3824  if(INFILE(_CR_EBT)) {
3825  INTERESTING("EBT");
3826  } else {
3827  INTERESTING("EBT-style");
3828  }
3829  }
3831  /*
3832  * SGML
3833  */
3834  if (HASTEXT(_TEXT_SGMLUG, 0) && INFILE(_LT_SGML)) {
3835  INTERESTING("SGML");
3836  }
3838  /*
3839  * LaTeX (KOMA-Script)
3840  */
3841  if (HASTEXT(_TEXT_LATEX, REG_EXTENDED)) {
3842  if (INFILE(_LT_LATEXPL_1) || INFILE(_LT_LATEXPL_2) ||
3843  INFILE(_LT_LATEXPL_3)) {
3844  cp = LPPLVERS();
3845  INTERESTING(lDebug ? "LPPL(1)" : cp);
3846  }
3847  else if (INFILE(_LT_LATEX)) {
3848  cp = LPPLVERS();
3849  INTERESTING(lDebug ? "LPPL(2)" : cp);
3850  }
3851  else if (INFILE(_LT_LATEXPLref1) || INFILE(_LT_LATEXPLref2) ||
3852  INFILE(_LT_LATEXPLref3)) {
3853  cp = LPPLVERS();
3854  INTERESTING(lDebug ? "LPPL(3)" : cp);
3855  }
3856  else if (INFILE(_LT_LATEXref1)) {
3857  cp = LPPLVERS();
3858  INTERESTING(lDebug ? "LPPL(4)" : cp);
3859  }
3860  else if (INFILE(_LT_LATEXref2)) {
3861  cp = LPPLVERS();
3862  INTERESTING(lDebug ? "LPPL(5)" : cp);
3863  }
3864  else if (INFILE(_LT_LATEXref3)) {
3865  cp = LPPLVERS();
3866  INTERESTING(lDebug ? "LPPL(6)" : cp);
3867  }
3868  else if (INFILE(_LT_LATEXref4)) {
3869  cp = LPPLVERS();
3870  INTERESTING(lDebug ? "LPPL(7)" : cp);
3871  }
3872  else if (INFILE(_LT_LATEXref5)) {
3873  cp = LPPLVERS();
3874  INTERESTING(lDebug ? "LPPL(8)" : cp);
3875  }
3876  else if (URL_INFILE(_URL_LATEX)) {
3877  cp = LPPLVERS();
3878  INTERESTING(lDebug ? "LPPL(url)" : cp);
3879  }
3880  }
3882  /*
3883  * QPL
3884  */
3885  if (INFILE(_LT_QPL) || INFILE(_LT_QPLref)) {
3886  if (INFILE(_TITLE_QPL10_1) || INFILE(_TITLE_QPL10_2)) {
3887  INTERESTING("QPL-1.0");
3888  lmem[_mQPL] = 1;
3889  }
3890  else if (INFILE(_TITLE_QPL)) {
3891  INTERESTING("QPL");
3892  lmem[_mQPL] = 1;
3893  }
3894  }
3896  /*
3897  * FREE Public License (not really open/free) and GHOSTSCRIPT
3898  */
3899  if (HASTEXT(_TEXT_GHOSTSCRIPT, 0)) {
3900  if (INFILE(_LT_GS)) {
3901  if (INFILE(_TITLE_GS11)) {
3902  INTERESTING("Ghostscript-GPL-1.1");
3903  }
3904  else {
3905  INTERESTING(lDebug ? "GS-GPL(1)" : "Ghostscript-GPL");
3906  }
3907  }
3908  else if (INFILE(_CR_ALADDIN) || INFILE(_CR_ARTOFCODE)) {
3909  if (INFILE(_LT_GS_GNU1) || INFILE(_LT_GS_GNU2)) {
3910  INTERESTING("GNU-Ghostscript");
3911  }
3912  else if (INFILE(_LT_GNU_1) && INFILE(_LT_GNU_2)) {
3913  INTERESTING(lDebug ? "GS-GPL(2)" : "Ghostscript-GPL");
3914  }
3915  else if (INFILE(_LT_FREEPL) || INFILE(_LT_FREEPLref)) {
3916  INTERESTING(lDebug ? "Aladdin(Closed-Source!)" : "Aladdin");
3917  if (INFILE(_PHR_NOT_OPEN)) {
3918  INTERESTING(lDebug ? "Aladdin(Closed-Source!)" : "Aladdin");
3919  lmem[_mALADDIN] = 1;
3920  }
3921  else {
3922  INTERESTING(lDebug ? "Aladdin-Ghostscript" : "Aladdin");
3923  }
3924  }
3925  else if (INFILE(_LT_ALADDIN_RESTRICT)) {
3926  INTERESTING(lDebug ? "Aladdin(RESTRICTED)": "Aladdin");
3927  }
3928  }
3929  else if (INFILE(_LT_AFPL)) {
3930  INTERESTING("AFPL-Ghostscript");
3931  }
3932  }
3933  else if (INFILE(_LT_FREEPLref_1)) {
3934  INTERESTING("Aladdin");
3935  }
3936  else if (INFILE(_LT_FREEPL) || INFILE(_LT_FREEPLref)) {
3937  INTERESTING("Free-PL");
3938  }
3939  /*
3940  * IPTC (International Press Telecommunications Council)
3941  */
3942  else if (INFILE(_TITLE_IPTC) || INFILE(_LT_IPTC_2)) {
3943  INTERESTING("IPTC");
3944  }
3945  else if (INFILE(_LT_IPTC_1) && mCR_IPTC()) {
3946  INTERESTING("IPTC");
3947  }
3948  /*
3949  * Macromedia
3950  */
3951  else if (INFILE(_TITLE_MACROMEDIA_EULA)) {
3952  INTERESTING("MacroMedia-RPSL");
3953  }
3954  /*
3955  * Ontopia
3956  */
3957  else if (INFILE(_LT_ONTOPIA) && INFILE(_TITLE_ONTOPIA)) {
3958  INTERESTING("Ontopia");
3959  }
3961  /*
3962  * Ascender
3963  */
3964  if (INFILE(_LT_ASCENDER_EULA) && INFILE(_TITLE_ASCENDER_EULA)) {
3965  INTERESTING("Ascender-EULA");
3966  }
3968  /*
3969  * ADAPTEC
3970  */
3971  if (INFILE(_LT_ADAPTEC_OBJ)) {
3972  INTERESTING("Adaptec.RESTRICTED");
3973  }
3974  else if (INFILE(_CR_ADAPTEC) && INFILE(_LT_ADAPTEC_GPL)) {
3975  INTERESTING("Adaptec-GPL");
3976  }
3978  /*
3979  * Artistic and Perl
3980  */
3981  if (INFILE(_LT_PERL_1)) {
3982  INTERESTING(lDebug ? "Artistic(Perl#1)" : "Artistic-1.0-Perl");
3983  if (!lmem[_mGPL]) {
3984  INTERESTING("Dual-license");
3985  INTERESTING(lDebug ? "GPL(Perl#1)" : "GPL-1.0-or-later");
3986  }
3987  }
3988  else if (INFILE(_LT_PERL_2)) {
3989  INTERESTING(lDebug ? "Artistic(Perl#2)" : "Artistic-1.0-Perl");
3990  if (!lmem[_mGPL]) {
3991  INTERESTING("Dual-license");
3992  INTERESTING(lDebug ? "GPL(Perl#2)" : "GPL-1.0-or-later");
3993  }
3994  }
3995  else if (INFILE(_LT_PERL_3)) {
3996  if (INFILE(_LT_Spencer_86_94_CLAUSE_1) &&
3997  HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) &&
3998  HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED)) {
3999  INTERESTING("Spencer-86");
4000  }
4001  else if (!lmem[_fOPENLDAP] && !TRYGROUP(famOPENLDAP)) {
4002  INTERESTING(lDebug ? "Artistic(Perl#3)" : "Artistic-1.0");
4003  }
4004  }
4005  /*
4006  * Licensed "same as perl itself" will actually be Artistic AND GPL, per
4007  * Larry Wall and the documented licensing terms of "perl"
4008  */
4009  else if (INFILE(_LT_PERLref1)) {
4010  INTERESTING(lDebug ? "Artistic(Perl-ref1)" : "Artistic-1.0-Perl");
4011  if (!lmem[_mGPL]) {
4012  INTERESTING("Dual-license");
4013  INTERESTING(lDebug ? "GPL(Perl-ref1)" : "GPL-1.0-or-later");
4014  }
4015  }
4016  else if (PERL_INFILE(_LT_PERLref2)) {
4017  INTERESTING(lDebug ? "Artistic(Perl-ref2)" : "Artistic-1.0-Perl");
4018  if (!lmem[_mGPL]) {
4019  INTERESTING("Dual-license");
4020  INTERESTING(lDebug ? "GPL(Perl-ref2)" : "GPL-1.0-or-later");
4021  }
4022  }
4023  else if (INFILE(_LT_PERLref3)) {
4024  INTERESTING(lDebug ? "Artistic(Perl-ref3)" : "Artistic-1.0-Perl");
4025  if (!lmem[_mGPL]) {
4026  INTERESTING("Dual-license");
4027  INTERESTING(lDebug ? "GPL(Perl-ref3)" : "GPL-1.0-or-later");
4028  }
4029  }
4030  else if (INFILE(_LT_PERLref4)) {
4031  INTERESTING(lDebug ? "Artistic(Perl-ref4)" : "Artistic-1.0-Perl");
4032  if (!lmem[_mGPL]) {
4033  INTERESTING("Dual-license");
4034  INTERESTING(lDebug ? "GPL(Perl-ref4)" : "GPL-1.0-or-later");
4035  }
4036  }
4037  else if (INFILE(_LT_PERLref5)) {
4038  INTERESTING(lDebug ? "Artistic(Perl-ref5)" : "Artistic-1.0-Perl");
4039  if (!lmem[_mGPL]) {
4040  INTERESTING("Dual-license");
4041  INTERESTING(lDebug ? "GPL(Perl-ref5)" : "GPL-1.0-or-later");
4042  }
4043  }
4044  else if (INFILE(_TITLE_CLARTISTIC)) {
4045  INTERESTING("ClArtistic");
4046  lmem[_fCLA] = 1;
4047  }
4048  else if (!lmem[_fREAL] && !LVAL(_TEXT_GNU_LIC_INFO) &&
4049  (INFILE(_LT_ART_1) || INFILE(_LT_ARTref1) ||
4050  INFILE(_LT_ARTref2) || INFILE(_LT_ARTref3) ||
4051  INFILE(_LT_ARTref4) || PERL_INFILE(_LT_ARTref5) ||
4052  PERL_INFILE(_LT_ARTref6))) {
4053  if (INFILE(_TITLE_OGTSL)) {
4054  INTERESTING("OGTSL");
4055  }
4056  else if (!lmem[_mLIBRE] && !lmem[_fOPENLDAP] &&
4057  !TRYGROUP(famOPENLDAP)) {
4058  if (INFILE(_LT_ART_V2) || INFILE(_TITLE_ART20)) {
4059  INTERESTING(lDebug ? "Artistic(v2.0#1)" : "Artistic-2.0");
4060  }
4061  else if (INFILE(_PHR_Artistic_20)) {
4062  INTERESTING("Artistic-2.0");
4063  }
4064  else if (INFILE(_TITLE_NBPL_V10)) {
4065  INTERESTING("NBPL-1.0");
4066  lmem[_fARTISTIC] = 1;
4067  }
4068  else if(HASTEXT(_PHR_ARTISTIC_PERL, 0)) {
4069  INTERESTING("Artistic-1.0-Perl");
4070  lmem[_fARTISTIC] = 1;
4071  }
4072  else if (HASTEXT(_PHR_ARTISTIC_CLAUSE8, 0))
4073  {
4074  INTERESTING("Artistic-1.0-cl8");
4075  lmem[_fARTISTIC] = 1;
4076  }
4077  else {
4078  INTERESTING(lDebug ? "Artistic(v1.0#other)" : "Artistic-1.0");
4079  lmem[_fARTISTIC] = 1;
4080  }
4081  }
4082  }
4083  else if (INFILE(_LT_ART_2) && INFILE(_TITLE_ART20)) {
4084  INTERESTING(lDebug ? "Artistic(v2.0#2)" : "Artistic-2.0");
4085  }
4086  else if (INFILE(_FILE_ART1) || INFILE(_FILE_ART2)) {
4087  INTERESTING(lDebug ? "Artistic(deb)" : "Artistic-1.0");
4088  }
4089  else if (URL_INFILE(_URL_ART)) {
4090  INTERESTING(lDebug ? "Artistic(url)" : "Artistic-1.0");
4091  }
4093  /*
4094  * LDP, Manpages, OASIS, GPDL, Linux-HOWTO and Linux-doc
4095  */
4096  if (INFILE(_TITLE_LDPL20)) {
4097  INTERESTING("LDPL-2.0");
4098  }
4099  else if (INFILE(_TITLE_LDPL1A)) {
4100  INTERESTING("LDPL-1A");
4101  }
4102  else if (INFILE(_LT_LDPL)) {
4103  INTERESTING(lDebug ? "LDPL(1)" : "LDPL");
4104  }
4105  else if (INFILE(_LT_LDPLref1)) {
4106  INTERESTING(lDebug ? "LDPL(ref1)" : "LDPL");
4107  }
4108  else if (INFILE(_LT_LDPLref2)) {
4109  INTERESTING(lDebug ? "LDPL(ref2)" : "LDPL");
4110  }
4111  else if (INFILE(_LT_LDPLref3)) {
4112  INTERESTING(lDebug ? "LDPL(ref3)" : "LDPL");
4113  }
4114  /*
4115  * GNU-Manpages, Software in the Public Interest (Debian), aka SPI
4116  */
4117  else if (INFILE(_LT_SPI)) {
4118  if (INFILE(_LT_MANPAGE)) {
4119  INTERESTING("GNU-Manpages");
4120  }
4121  else if (!lmem[_fGPL]) {
4122  if (INFILE(_CR_SPI)) {
4123  INTERESTING("Debian-SPI");
4124  }
4125  else {
4126  INTERESTING("Debian-SPI-style");
4127  }
4128  }
4129  }
4130  else if (INFILE(_LT_GPDLref)) {
4131  INTERESTING(lDebug ? "GPDL(1)" : "GPDL");
4132  }
4133  else if (INFILE(_TITLE_GPDL)) {
4134  INTERESTING(lDebug ? "GPDL(2)" : "GPDL");
4135  }
4136  else if (INFILE(_LT_FREEBSD_DOC) && INFILE(_TITLE_FREEBSD_DOC)) {
4137  INTERESTING("FreeBSD-Doc");
4138  }
4139  else if (INFILE(_LT_LINUX_HOWTO)) {
4140  INTERESTING("Linux-HOWTO");
4141  }
4142  else if (INFILE(_LT_LINUXDOC)) {
4143  INTERESTING("LinuxDoc");
4144  }
4145  else if (INFILE(_LT_IEEE_DOC)) {
4146  INTERESTING("IEEE-Doc");
4147  }
4149  /*
4150  * U-Washington
4151  */
4152  if (INFILE(_LT_UW1)) {
4153  if (INFILE(_CR_UWASHINGTON)) {
4154  INTERESTING("U-Wash.Free-Fork");
4155  }
4156  else {
4157  INTERESTING(lDebug ? "U-Wash-style(1)" : "U-Wash-style");
4158  }
4159  }
4160  else if (INFILE(_LT_UW2)) {
4161  if (INFILE(_CR_UWASHINGTON)) {
4162  INTERESTING(lDebug ? "U-Wash(2)" : "U-Washington");
4163  }
4164  else {
4165  INTERESTING(lDebug ? "U-Wash-style(2)" : "U-Wash-style");
4166  }
4167  }
4168  else if (INFILE(_LT_UW3)) {
4169  if (INFILE(_CR_UWASHINGTON)) {
4170  INTERESTING(lDebug ? "U-Wash(3)" : "U-Washington");
4171  }
4172  else {
4173  INTERESTING(lDebug ? "U-Wash-style(3)" : "U-Wash-style");
4174  }
4175  }
4176  else if (INFILE(_LT_UW4)) {
4177  if (INFILE(_CR_UWASHINGTON)) {
4178  INTERESTING(lDebug ? "U-Wash(4)" : "U-Washington");
4179  }
4180  else {
4181  INTERESTING(lDebug ? "U-Wash-style(4)" : "U-Wash-style");
4182  }
4183  }
4185  /*
4186  * WU-ftpd (not the school north of Oregon!
4187  */
4188  if (INFILE(_LT_WU_FTPD)) {
4189  if (INFILE(_TITLE_WU_FTPD) || INFILE(_CR_WASHU)) {
4190  INTERESTING(lDebug ? "Wash-U(1)" : "Wash-U-StLouis");
4191  }
4192  else {
4193  INTERESTING("Wash-U-style");
4194  }
4195  }
4196  else if (INFILE(_LT_WU_FTPDref)) {
4197  INTERESTING(lDebug ? "Wash-U(ref)" : "Wash-U-StLouis");
4198  }
4199  /*
4200  * Delaware
4201  */
4202  else if (INFILE(_LT_DELAWARE)) {
4203  if (INFILE(_CR_DELAWARE)) {
4204  INTERESTING("U-Del");
4205  }
4206  else {
4207  INTERESTING("U-Del-style");
4208  }
4209  }
4210  /*
4211  * Princeton
4212  */
4213  else if (INFILE(_LT_PRINCETON) && NOT_INFILE(_TITLE_WORDNET)) {
4214  if (INFILE(_CR_PRINCETON)) {
4215  INTERESTING("Princeton");
4216  }
4217  else {
4218  INTERESTING("Princeton-style");
4219  }
4220  }
4221  /*
4222  * University of Michigan
4223  */
4224  else if (INFILE(_LT_UMICHIGAN_1)) {
4225  if (INFILE(_CR_MICHIGAN)) {
4226  INTERESTING(lDebug ? "U-Mich(1)" : "U-Michigan");
4227  }
4228  else {
4229  INTERESTING(lDebug ? "U-Mich-style(1)" : "U-Mich-style");
4230  }
4231  }
4232  else if (INFILE(_LT_UMICHIGAN_2)) {
4233  if (INFILE(_CR_MICHIGAN)) {
4234  INTERESTING(lDebug ? "U-Mich(2)" : "U-Michigan");
4235  }
4236  else {
4237  INTERESTING(lDebug ? "U-Mich-style(2)" : "U-Mich-style");
4238  }
4239  }
4240  /*
4241  * Southern Cal
4242  */
4243  else if (INFILE(_LT_USC_NC)) {
4244  if (INFILE(_CR_USC)) {
4245  INTERESTING("USC.Non-commercial");
4246  }
4247  else {
4248  INTERESTING(lDebug ? "NonC(5)" : "Non-commercial");
4249  }
4250  }
4251  else if (INFILE(_LT_USC)) {
4252  if (INFILE(_CR_USC)) {
4253  INTERESTING("USC");
4254  }
4255  else {
4256  INTERESTING("USC-style");
4257  }
4258  }
4259  /*
4260  * Unversity Corporation for Atmospheric Research (UCAR)
4261  */
4262  else if (INFILE(_LT_UCAR_1) && INFILE(_LT_UCAR_2)) {
4263  INTERESTING("UCAR");
4264  }
4265  else if (INFILE(_LT_UCAR_3) && INFILE(_CR_UCAR)) {
4266  if (INFILE(_CR_UCAR)) {
4267  INTERESTING("UCAR");
4268  }
4269  else {
4270  INTERESTING("UCAR-style");
4271  }
4272  }
4273  /*
4274  * Stanford
4275  */
4276  else if (INFILE(_LT_STANFORD)) {
4277  if (INFILE(_CR_STANFORD)) {
4278  INTERESTING("Stanford");
4279  }
4280  else {
4281  INTERESTING("Stanford-style");
4282  }
4283  }
4284  /*
4285  * U-Cambridge
4286  */
4287  else if (INFILE(_LT_CAMBRIDGE)) {
4288  if (HASTEXT(_LT_MSNTP, 0)) {
4289  INTERESTING("MSNTP");
4290  }
4291  else if (INFILE(_CR_CAMBRIDGE_1) || INFILE(_CR_CAMBRIDGE_2)) {
4292  INTERESTING("U-Cambridge");
4293  }
4294  else {
4295  INTERESTING("U-Cambridge-style");
4296  }
4297  }
4298  /*
4299  * Columbia University
4300  */
4301  else if (INFILE(_CR_COLUMBIA) && INFILE(_LT_COLUMBIA)) {
4302  INTERESTING("U-Columbia");
4303  }
4304  /*
4305  * University of Notre Dame (Different from Boost!)
4306  */
4307  if (INFILE(_LT_ND_1)) {
4308  if (INFILE(_CR_NOTREDAME)) {
4309  INTERESTING(lDebug ? "ND(1)" : "NotreDame");
4310  }
4311  else {
4312  INTERESTING(lDebug ? "ND-style(1)" : "NotreDame-style");
4313  }
4314  }
4315  else if (INFILE(_LT_ND_2)) {
4316  if (INFILE(_CR_NOTREDAME)) {
4317  INTERESTING(lDebug ? "ND(2)" : "NotreDame");
4318  }
4319  else {
4320  INTERESTING(lDebug ? "ND-style(2)" : "NotreDame-style");
4321  }
4322  }
4323  else if (INFILE(_LT_ND_3)) {
4324  if (INFILE(_CR_NOTREDAME)) {
4325  INTERESTING(lDebug ? "ND(3)" : "NotreDame");
4326  }
4327  else {
4328  INTERESTING(lDebug ? "ND-style(3)" : "NotreDame-style");
4329  }
4330  }
4332  /*
4333  * Boost references
4334  */
4335  if (!lmem[_mMIT] && INFILE(_LT_BOOST_2)) {
4336  if (INFILE(_CR_BOOST)) {
4337  INTERESTING(lDebug ? "Boost(2)" : "BSL-1.0");
4338  }
4339  else {
4340  INTERESTING(lDebug ? "Boost-style(2)" : "BSL-style");
4341  }
4342  }
4343  else if (INFILE(_LT_BOOSTref1)) {
4344  if (INFILE(_TITLE_BOOST10) || INFILE(_PHR_BOOST_V10) ||
4345  URL_INFILE(_URL_BOOST_10)) {
4346  INTERESTING(lDebug ? "Boost1.0(ref)" : "BSL-1.0");
4347  }
4348  else {
4349  INTERESTING(lDebug ? "Boost(ref)" : "BSL-1.0");
4350  }
4351  }
4352  else if (INFILE(_LT_BOOST_GRAPH)) {
4353  INTERESTING(lDebug ? "Boost(graph)" : "BSL-1.0");
4354  }
4355  else if (INFILE(_LT_BOOST_LAMBDA)) {
4356  INTERESTING(lDebug ? "Boost(lambda)" : "BSL-1.0");
4357  }
4358  else if (URL_INFILE(_URL_BOOST_10)) {
4359  INTERESTING(lDebug ? "Boost-1.0(ref)" : "BSL-1.0");
4360  }
4361  /*
4362  * Sleepycat NON-Commerical
4363  */
4364  else if (INFILE(_LT_SLEEPYCAT_NC)) {
4365  INTERESTING("Sleepycat.Non-commercial");
4366  }
4368  /*
4369  * Vim license
4370  */
4371  if ((INFILE(_LT_Vim_1) || INFILE(_LT_Vim_2)) && INFILE(_TITLE_Vim)) {
4372  INTERESTING("Vim");
4373  }
4374  else if (INFILE(_PHR_Vim)) {
4375  INTERESTING("Vim");
4376  }
4378  /*
4379  * Vixie license
4380  */
4381  if (INFILE(_LT_VIXIE)) {
4382  INTERESTING("Vixie-license");
4383  }
4385  /*
4386  * Yahoo!
4387  */
4388  if (INFILE(_LT_YAHOO_1)) {
4389  if (INFILE(_LT_YAHOO_BINARY)) {
4390  INTERESTING("Yahoo-EULA");
4391  }
4392  else {
4393  INTERESTING("YPL");
4394  }
4395  }
4396  if(INFILE(_TITLE_YPL_V10)) {
4397  INTERESTING("YPL-1.0");
4398  }
4399  else if(INFILE(_TITLE_YPL_V11)) {
4400  INTERESTING("YPL-1.1");
4401  }
4403  /*
4404  * Public Use
4405  */
4406  if (INFILE(_LT_PUBLIC_USE)) {
4407  if (INFILE(_TITLE_PUBUSE_V10)) {
4408  INTERESTING("Public-Use-1.0");
4409  }
4410  else {
4411  INTERESTING("Public-Use");
4412  }
4413  }
4415  /*
4416  * Apple
4417  */
4418  if (INFILE(_TEXT_APPLE)) {
4419  if (INFILE(_LT_MIT_12)) {
4420  INTERESTING(lDebug ? "Apple MIT License" : "AML");
4421  }
4422  else if (INFILE(_LT_APPLE_1)) {
4423  INTERESTING(lDebug ? "Apple(1)" : "Apple");
4424  }
4425  else if (INFILE(_LT_APPLE_2)) {
4426  INTERESTING(lDebug ? "Apple(2)" : "Apple");
4427  }
4428  else if (INFILE(_LT_APPLE_3)) { /* squeak license */
4429  INTERESTING(lDebug ? "Apple(3)" : "Apple");
4430  }
4431  else if (INFILE(_LT_APPLE_4)) { /* squeak license */
4432  INTERESTING(lDebug ? "Apple(4)" : "Apple-EULA");
4433  }
4434  else if (INFILE(_LT_APPLE_FONTFORGE)) {
4435  INTERESTING("Apple.FontForge");
4436  }
4437  else if (INFILE(_LT_APPLE_SAMPLE)) {
4438  INTERESTING("Apple.Sample");
4439  }
4440  else if (INFILE(_LT_APSLref1) || INFILE(_LT_APSLref2) ||
4441  INFILE(_TITLE_APSL)) {
4442  if (INFILE(_TITLE_APSL20)) {
4443  INTERESTING("APSL-2.0");
4444  }
4445  else if (INFILE(_TITLE_Ferris)) {
4446  INTERESTING(lDebug ? "Ferris-1.2" : "APSL-style");
4447  }
4448  else if (INFILE(_TITLE_APSL_style)) {
4449  INTERESTING("APSL-style");
4450  }
4451  else if (INFILE(_TITLE_APSL12)) {
4452  INTERESTING("APSL-1.2");
4453  }
4454  else if (INFILE(_TITLE_APSL11)) {
4455  INTERESTING("APSL-1.1");
4456  }
4457  else if (INFILE(_TITLE_APSL10)) {
4458  INTERESTING("APSL-1.0");
4459  }
4460  else {
4461  INTERESTING("APSL");
4462  }
4463  }
4464  else if (INFILE(_LT_ACDL)) {
4465  INTERESTING("ACDL");
4466  }
4467  else if (INFILE(_TITLE_APPLE_SLA)) {
4468  INTERESTING(lDebug ? "Apple(SLA)" : "Apple-EULA");
4469  }
4470  else if (URL_INFILE(_URL_APSL)) {
4471  INTERESTING(lDebug ? "APSL(url)" : "APSL");
4472  }
4473  else if (URL_INFILE(_URL_ACDL)) {
4474  INTERESTING(lDebug ? "ACDL(url)" : "ACDL");
4475  }
4476  }
4478  /*
4479  * Redland
4480  */
4481  if (INFILE(_LT_REDLAND)) {
4482  INTERESTING("Redland");
4483  }
4485  /*
4486  * Red Hat and Fedora
4487  */
4488  if (INFILE(_LT_RH_PKGS)) {
4489  if (INFILE(_LT_RH_NONCOMMERCIAL)) {
4490  INTERESTING(lDebug ? "RH(NC)" : "RedHat.Non-commercial");
4491  lmem[_mREDHAT] = 1;
4492  }
4493  else if (INFILE(_LT_RH_FEDORA)) {
4494  INTERESTING(lDebug ? "Fedora(1)" : "Fedora");
4495  lmem[_mREDHAT] = 1;
4496  }
4497  }
4498  else if (INFILE(_LT_RH_REDHAT)) {
4499  INTERESTING(lDebug ? "RH(2)" : "RedHat");
4500  lmem[_mREDHAT] = 1;
4501  }
4502  else if (INFILE(_LT_RH_SPECIFIC)) {
4503  INTERESTING(lDebug ? "RH(4)" : "RedHat-specific");
4504  lmem[_mREDHAT] = 1;
4505  }
4506  else if (INFILE(_LT_FEDORA)) {
4507  INTERESTING(lDebug ? "Fedora(2)" : "Fedora");
4508  lmem[_mREDHAT] = 1;
4509  }
4510  else if (INFILE(_LT_FEDORA_CLA) || INFILE(_TITLE_FEDORA_CLA)) {
4511  INTERESTING("FedoraCLA");
4512  lmem[_mREDHAT] = 1;
4513  }
4514  else if (INFILE(_CR_REDHAT)) {
4515  if (INFILE(_LT_RH_1)) {
4516  INTERESTING(lDebug ? "RH(1)" : "RedHat");
4517  lmem[_mREDHAT] = 1;
4518  }
4519  else if (INFILE(_LT_RH_EULA)) {
4520  INTERESTING("RedHat-EULA");
4521  lmem[_mREDHAT] = 1;
4522  }
4523  }
4525  /*
4526  * SUSE/Novell/UnitedLinux
4527  */
4528  if (INFILE(_CR_SUSE) && INFILE(_PHR_YAST_CR)) {
4529  INTERESTING("YaST.SuSE");
4530  }
4531  else if (INFILE(_TITLE_NOVELL_EULA)) {
4532  INTERESTING("Novell-EULA");
4533  }
4534  else if (INFILE(_TITLE_UL_EULA)) {
4535  INTERESTING("UnitedLinux-EULA");
4536  }
4537  else if (INFILE(_LT_NOVELL)) {
4538  INTERESTING("Novell");
4539  lmem[_fIP] = 1;
4540  }
4541  else if (INFILE(_LT_NOVELL_IP_1)) {
4542  INTERESTING(lDebug ? "Novell-IP(1)" : "Novell-IP");
4543  lmem[_fIP] = 1;
4544  }
4545  else if (INFILE(_LT_NOVELL_IP_2)) {
4546  INTERESTING(lDebug ? "Novell-IP(2)" : "Novell-IP");
4547  lmem[_fIP] = 1;
4548  }
4550  /*
4551  * Epson Public license
4552  */
4553  if (INFILE(_LT_EPSON_PL) && INFILE(_TITLE_EPSON_PL)) {
4554  INTERESTING("Epson-PL");
4555  }
4556  else if (INFILE(_LT_EPSON_EULA) && INFILE(_TITLE_EPSON_EULA)) {
4557  INTERESTING("Epson-EULA");
4558  }
4560  /*
4561  * Open Publication license
4562  */
4563  if (INFILE(_LT_OPENPUBL_1) || INFILE(_LT_OPENPUBL_2)) {
4564  if (INFILE(_TITLE_OPENPUBL04)) {
4565  INTERESTING("Open-PL-0.4");
4566  }
4567  else if (INFILE(_TITLE_OPENPUBL10) || URL_INFILE(_URL_OPEN_PL_V10)) {
4568  INTERESTING("Open-PL-1.0");
4569  }
4570  else if (INFILE(_TITLE_OPENPUBL)) {
4571  INTERESTING("Open-PL");
4572  }
4573  else {
4574  INTERESTING("Open-PL-style");
4575  }
4576  }
4577  else if (INFILE(_LT_OPENPUBLref)) {
4578  INTERESTING(lDebug ? "Open-PL(ref)" : "Open-PL");
4579  }
4581  /*
4582  * Free Art License
4583  */
4584  if (INFILE(_LT_FREEART_V10)) {
4585  INTERESTING("FAL-1.0");
4586  }
4587  else if (INFILE(_LT_FREEART_V13)) {
4588  INTERESTING("FAL-1.3");
4589  }
4591  /*
4592  * RSA Security, Inc.
4593  */
4594  if (INFILE(_LT_RSA_4)) {
4595  INTERESTING(lDebug ? "RSA(4)" : "RSA-MD");
4596  }
4597  else if (INFILE(_LT_RSA_5)) {
4598  INTERESTING(lDebug ? "RSA(5)" : "RSA-DNS");
4599  }
4600  else if (INFILE (_LT_RSA_CRYPTOKI_1) && INFILE(_LT_RSA_CRYPTOKI_2)){
4601  INTERESTING("RSA-Cryptoki");
4602  }
4603  else if (INFILE(_LT_RSA_3)) {
4604  INTERESTING(lDebug ? "RSA(3)" : "RSA-Security");
4605  }
4606  else if (INFILE(_CR_RSA)) {
4607  if (INFILE(_LT_RSA_1)) {
4608  INTERESTING(lDebug ? "RSA(1)" : "RSA-Security");
4609  }
4610  else if (INFILE(_LT_RSA_2)) {
4611  INTERESTING(lDebug ? "RSA(2)" : "RSA-Security");
4612  }
4613  }
4615  /* Some licenses only deal with fonts */
4616  if (HASTEXT(_TEXT_FONT, 0)) {
4617  /*
4618  * AGFA Monotype
4619  */
4620  if (INFILE(_LT_AGFA)) {
4621  INTERESTING("AGFA.RESTRICTED");
4622  }
4623  else if (INFILE(_LT_AGFA_EULA)) {
4624  INTERESTING("AGFA-EULA");
4625  }
4626  /*
4627  * Bigelow and Holmes
4628  */
4629  if (INFILE(_LT_BH_FONT)) {
4630  if (INFILE(_CR_BH)) {
4631  INTERESTING("BH-Font");
4632  }
4633  else {
4634  INTERESTING("BH-Font-style");
4635  }
4636  }
4638  /*
4639  * BIZNET
4640  */
4641  if (INFILE(_LT_BIZNET)) {
4642  if (INFILE(_CR_BIZNET)) {
4643  INTERESTING("BIZNET");
4644  }
4645  else {
4646  INTERESTING("BIZNET-style");
4647  }
4648  }
4650  /*
4651  * BITSTREAM
4652  */
4653  if (INFILE(_LT_BITSTREAM_1)) {
4654  INTERESTING(lDebug ? "Bitstream(2)" : "Bitstream");
4655  }
4656  else if (INFILE(_LT_BITSTREAM_2)) {
4657  INTERESTING(lDebug ? "Bitstream(3)" : "Bitstream");
4658  }
4660  /*
4661  * Larabie Fonts
4662  */
4663  if (INFILE(_LT_LARABIE_EULA) && INFILE(_TITLE_LARABIE_EULA)) {
4664  INTERESTING("Larabie-EULA");
4665  }
4667  /*
4668  * Baekmuk Fonts and Hwan Design
4669  */
4670  if (INFILE(_LT_BAEKMUK_1)) {
4671  INTERESTING("Baekmuk-Font");
4672  }
4673  else if (INFILE(_LT_BAEKMUK_2)) {
4674  INTERESTING("Baekmuk.Hwan");
4675  }
4677  /*
4678  * Information-Technology Promotion Agency (IPA)
4679  */
4680  if (INFILE(_LT_IPA_EULA)) {
4681  INTERESTING("IPA-Font-EULA");
4682  }
4684  /*
4685  * Arphic Public License
4686  */
4687  if (INFILE(_LT_ARPHIC)) {
4688  if (INFILE(_CR_ARPHIC)) {
4689  INTERESTING("Arphic-Font-PL");
4690  }
4691  else {
4692  INTERESTING("Arphic-style");
4693  }
4694  }
4695  }
4697  /*
4698  * AT&T
4699  */
4700  if (INFILE(_LT_ATT_1)) {
4701  if (INFILE(_CR_ATT)) {
4702  INTERESTING(lDebug ? "ATT(1)" : "ATT");
4703  }
4704  else {
4705  INTERESTING(lDebug ? "ATT-style(1)" : "ATT-style");
4706  }
4707  }
4708  else if (INFILE(_LT_ATT_2)) {
4709  if (!lmem[_fBSD] && INFILE(_CR_BSDCAL)) {
4710  INTERESTING(lDebug ? "BSD(14)" : "BSD");
4711  lmem[_fBSD] = 1;
4712  }
4713  else if (INFILE(_CR_ATT) || INFILE(_CR_LUCENT)) {
4714  INTERESTING(lDebug ? "ATT(2)" : "ATT");
4715  }
4716  else {
4717  INTERESTING(lDebug ? "ATT-style(2)" : "ATT-style");
4718  }
4719  }
4720  else if (INFILE(_LT_ATT_SRC_1) || INFILE(_LT_ATT_SRC_2)) {
4721  if (INFILE(_TITLE_ATT_SRC_12D)) {
4722  INTERESTING("ATT-Source-1.2d");
4723  }
4724  else if (INFILE(_TITLE_ATT_SRC_10)) {
4725  INTERESTING("ATT-Source-1.0");
4726  }
4727  else {
4728  INTERESTING("ATT-Source");
4729  }
4730  }
4731  else if (INFILE(_LT_ATT_NONCOMMERC1) || INFILE(_LT_ATT_NONCOMMERC2)) {
4732  INTERESTING("ATT.Non-commercial");
4733  }
4735  /*
4736  * Silicon Graphics
4737  */
4738  if (INFILE(_TITLE_SGI_V10)) {
4739  INTERESTING("SGI-B-1.0");
4740  }
4741  else if (INFILE(_TITLE_SGI_V11)) {
4742  INTERESTING("SGI-B-1.1");
4743  }
4744  else if (INFILE(_TITLE_SGI_V20)) {
4745  INTERESTING("SGI-B-2.0");
4746  }
4747  else if (INFILE(_LT_SGI_1)) {
4748  if (HASTEXT(_PHR_SGI_LIBTIFF, REG_EXTENDED)) {
4749  INTERESTING("libtiff");
4750  }
4751  else if (HASTEXT(_PHR_LIBTIFF_STYLE, REG_EXTENDED)) {
4752  INTERESTING("libtiff-style");
4753  }
4754  }
4755  else if (INFILE(_LT_SGI_2)) {
4756  if (INFILE(_LT_SGI_V10)) {
4757  INTERESTING("SGI-B-1.0");
4758  }
4759  else if (INFILE(_LT_SGI_V11)) {
4760  INTERESTING("SGI-B-1.1");
4761  }
4762  else if (INFILE(_LT_SGI_V20)) {
4763  INTERESTING("SGI-B-2.0");
4764  }
4765  else if (INFILE(_CR_SGI) || URL_INFILE(_URL_SGI)) {
4766  INTERESTING("SGI");
4767  }
4768  }
4769  else if (INFILE(_LT_SGI_1)) {
4770  if (INFILE(_CR_SGI) || URL_INFILE(_URL_SGI)) {
4771  INTERESTING("SGI-style");
4772  }
4773  }
4774  else if (INFILE(_LT_SGI_FREEW)) {
4775  INTERESTING("SGI-Freeware");
4776  }
4777  else if (INFILE(_LT_SGI_GLX)) {
4778  if (INFILE(_TITLE_SGI_GLX_V10)) {
4779  INTERESTING(lDebug ? "SGI_GLX(1.0)" : "SGI_GLX-1.0");
4780  }
4781  else {
4782  INTERESTING("SGI_GLX");
4783  }
4784  }
4785  else if (INFILE(_LT_SGI_GLXref) && INFILE(_CR_SGI)) {
4786  if (INFILE(_TITLE_SGI_GLX_V10)) {
4787  INTERESTING(lDebug ? "SGI_GLX(10ref)" : "SGI_GLX-1.0");
4788  }
4789  else {
4790  INTERESTING(lDebug ? "SGI_GLX(ref)" : "SGI_GLX");
4791  }
4792  }
4793  else if (INFILE(_LT_SGI_PROPRIETARY) && INFILE(_CR_SGI)) {
4794  INTERESTING("SGI-Proprietary");
4795  }
4797  /*
4798  * 3DFX (Glide)
4799  */
4800  if (INFILE(_CR_3DFX_1) || INFILE(_CR_3DFX_2)) {
4801  if (INFILE(_LT_GLIDE_3DFX)) {
4802  INTERESTING("Glide");
4803  }
4804  else if (INFILE(_LT_GLIDE_GPL)) {
4805  INTERESTING("3DFX-PL");
4806  }
4807  }
4808  /*
4809  * Nvidia Corp
4810  */
4811  else if (INFILE(_LT_NVIDIA_EULA_3)) {
4812  INTERESTING(lDebug ? "Nvidia(1)" : "Nvidia-EULA-a");
4813  }
4814  else if (INFILE(_CR_NVIDIA) && INFILE(_LT_NVIDIA)) {
4815  INTERESTING(lDebug ? "Nvidia(2)" : "Nvidia");
4816  }
4817  else if (INFILE(_LT_NVIDIA_EULA_2)) {
4818  INTERESTING(lDebug ? "Nvidia(3)" : "Nvidia-EULA-b");
4819  }
4820  else if (INFILE(_LT_NVIDIA_EULA_1) || INFILE(_TITLE_NVIDIA)) {
4821  INTERESTING(lDebug ? "Nvidia(4)" : "Nvidia-EULA-b");
4822  }
4823  else if (INFILE(_LT_NVIDIA_1)) {
4824  INTERESTING(lDebug ? "Nvidia(5)" : "Nvidia");
4825  }
4826  /*
4827  * ATI Corp
4828  */
4829  else if (INFILE(_TITLE_ATI_EULA) && INFILE(_LT_ATI_EULA)) {
4830  INTERESTING("ATI-EULA");
4831  }
4832  /*
4833  * Agere Systems
4834  */
4835  else if (INFILE(_TITLE_AGERE_EULA) && INFILE(_LT_AGERE_EULA)) {
4836  INTERESTING("Agere-EULA");
4837  }
4839  /*
4840  * KD Tools, AB
4841  */
4842  if (INFILE(_TITLE_KDAB_EULA)) {
4843  if (INFILE(_LT_KDAB_1)) {
4844  INTERESTING(lDebug ? "KDAB(1)" : "KD-Tools-EULA");
4845  }
4846  if (INFILE(_LT_KDAB_2)) {
4847  INTERESTING(lDebug ? "KDAB(2)" : "KD-Tools-EULA");
4848  }
4849  }
4851  /*
4852  * KDE
4853  */
4854  if (INFILE(_PHR_KDE_FILE) && INFILE(_LT_KDE)) {
4855  INTERESTING("KDE");
4856  }
4858  /*
4859  * Broadcom
4860  */
4861  if (INFILE(_LT_BROADCOM_EULA) && INFILE(_CR_BROADCOM)) {
4862  INTERESTING("Broadcom-EULA");
4863  }
4865  /*
4866  * DARPA (Defense Advanved Research Projects Agency)
4867  */
4868  if (INFILE(_LT_DARPA_COUGAAR_1)) {
4869  INTERESTING("DARPA-Cougaar");
4870  }
4871  else if (INFILE(_LT_DARPA)) {
4872  INTERESTING("DARPA");
4873  }
4875  /*
4876  * Tektronix
4877  */
4878  if (INFILE(_LT_TEKTRONIX)) {
4879  if (INFILE(_CR_TEKTRONIX)) {
4880  INTERESTING("Tektronix");
4881  }
4882  else {
4883  INTERESTING("Tektronix-style");
4884  }
4885  }
4887  /*
4888  * Alliance for Open Media Patent License
4889  */
4890  if (INFILE(_LT_AOM_Patent)) {
4891  INTERESTING("Alliance for Open Media Patent License 1.0");
4892  }
4894  /*
4895  * Open Market, Inc
4896  */
4897  if (INFILE(_LT_CADENCE) && INFILE(_CR_CADENCE)) {
4898  INTERESTING("Cadence");
4899  }
4901  /*
4902  * Open Market, Inc
4903  */
4904  if (INFILE(_LT_OPENMKT)) {
4905  INTERESTING("OpenMarket");
4906  }
4908  /*
4909  * Unicode
4910  */
4911  if (!lmem[_fUNICODE]) {
4912  if (INFILE(_TITLE_UNICODE)) {
4913  INTERESTING(lDebug ? "Unicode(4)" : "Unicode");
4914  }
4915  else if (INFILE(_LT_UNICODE_1) && INFILE(_CR_UNICODE)) {
4916  INTERESTING(lDebug ? "Unicode(1)" : "Unicode");
4917  }
4918  else if (INFILE(_LT_UNICODE_2)) {
4919  INTERESTING(lDebug ? "Unicode(2)" : "Unicode");
4920  }
4921  else if (INFILE(_LT_UNICODE_3)) {
4922  INTERESTING(lDebug ? "Unicode(3)" : "Unicode");
4923  }
4924  else if (INFILE(_LT_UNICODE_4)) {
4925  INTERESTING(lDebug ? "Unicode(4)" : "Unicode-TOU");
4926  }
4927  else if (URL_INFILE(_URL_UNICODE)) {
4928  INTERESTING(lDebug ? "Unicode(5)" : "Unicode-TOU");
4929  }
4930  else if (INFILE(_TITLE_UNICODE_TOU) && INFILE(_LT_UNICODE_TOU)) {
4931  INTERESTING("Unicode-TOU");
4932  }
4934  }
4935  /*
4936  * Software Research Assoc
4937  */
4938  if (INFILE(_LT_SRA) && INFILE(_CR_SRA)) {
4939  INTERESTING("SW-Research");
4940  }
4942  /*
4943  * MITRE Collaborative Virtual Workspace (CVW) License
4944  */
4945  if (INFILE(_LT_MITRE_1)) {
4946  if (INFILE(_CR_MITRE)) {
4947  INTERESTING(lDebug ? "MitreCVW(1)" : "MitreCVW");
4948  }
4949  else if (INFILE(_TITLE_CVW)) {
4950  INTERESTING(lDebug ? "MitreCVW(2)" : "MitreCVW");
4951  }
4952  else {
4953  INTERESTING("MitreCVW-style");
4954  }
4955  }
4956  else if (INFILE(_LT_MITRE_2)) {
4957  INTERESTING(lDebug ? "Mitre(2)" : "Mitre");
4958  }
4960  /*
4961  * Jabber, Motosoto
4962  */
4963  if (INFILE(_LT_JABBER_1)) {
4964  if (INFILE(_TITLE_MOTOSOTO091)) {
4965  INTERESTING("Motosoto");
4966  }
4967  else if (INFILE(_TITLE_JABBER)) {
4968  INTERESTING("Jabber");
4969  }
4970  }
4971  else if (INFILE(_LT_JABBER_2)) {
4972  if (INFILE(_TITLE_JABBER_V10)) {
4973  INTERESTING(lDebug ? "Jabber(1.0)" : "Jabber-1.0");
4974  }
4975  else {
4976  INTERESTING(lDebug ? "Jabber(2)" : "Jabber");
4977  }
4978  }
4979  else if (URL_INFILE(_URL_JABBER)) {
4980  INTERESTING(lDebug ? "Jabber(url)" : "Jabber");
4981  }
4983  /*
4984  * CPL, Lucent Public License, Eclipse PL
4985  */
4986  int _epl = 0;
4987  if (INFILE(_LT_CPL_1) || INFILE(_LT_CPL_2)) {
4988  if (INFILE(_TITLE_IBM_PL20)) {
4989  INTERESTING("IPL-2.0");
4990  }
4991  else if (INFILE(_TITLE_IBM_PL10)) {
4992  INTERESTING("IPL-1.0");
4993  }
4994  else if (INFILE(_TITLE_IBM_PL)) {
4995  INTERESTING("IPL");
4996  }
4997  else if (INFILE(_TITLE_OpenGroup)) {
4998  INTERESTING("OpenGroup");
4999  }
5000  else if (INFILE(_TITLE_EPL10)) {
5001  INTERESTING(lDebug ? "Eclipse(v.0#1)" : "EPL-1.0");
5002  _epl = 1;
5003  }
5004  else if (INFILE(_TITLE_EPL20)) {
5005  INTERESTING(lDebug ? "Eclipse(v.2#1)" : "EPL-2.0");
5006  _epl = 1;
5007  }
5008  else if (INFILE(_TITLE_EPL) && NOT_INFILE(_TITLE_EPL_IGNORE)) {
5009  INTERESTING(lDebug ? "Eclipse(#1)" : "EPL");
5010  _epl = 1;
5011  }
5012  else if (INFILE(_TITLE_LUCENT102)) {
5013  INTERESTING("LPL-1.02");
5014  }
5015  else if (INFILE(_TITLE_LUCENT10)) {
5016  INTERESTING("LPL-1.0");
5017  }
5018  else if (NOT_INFILE(_LT_CA)) {
5019  cp = CPLVERS();
5020  INTERESTING(lDebug ? "CPL(#1)" : cp);
5021  }
5022  }
5023  else if (INFILE(_LT_LPL_102)) {
5024  INTERESTING("LPL-1.02");
5025  }
5026  else if (!lmem[_fREAL] && INFILE(_LT_CPLref1) && NOT_INFILE(_TITLE_EPL10)) {
5027  cp = CPLVERS();
5028  INTERESTING(lDebug ? "CPL(ref)" : cp);
5029  }
5030  else if (URL_INFILE(_URL_CPL)) {
5031  cp = CPLVERS();
5032  INTERESTING(lDebug ? "CPL(url)" : cp);
5033  }
5034  else if (INFILE(_PHR_CPL_05)) {
5035  INTERESTING(lDebug ? "CPL(0.5)" : "CPL-0.5");
5036  }
5037  else if (INFILE(_PHR_CPL_10)) {
5038  INTERESTING(lDebug ? "CPL(0.5)" : "CPL-1.0");
5039  }
5040  else if (INFILE(_LT_IBM_PLref1)) {
5041  INTERESTING(lDebug ? "IBM-PL(ref)" : "IPL");
5042  }
5043  else if (URL_INFILE(_URL_IBM_PL)) {
5044  INTERESTING(lDebug ? "IBM-PL(url)" : "IPL");
5045  }
5047  /* More EPL cases */
5048  if (!_epl) {
5049  if (INFILE(_LT_EPL20ref_1)) {
5050  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-2.0");
5051  }
5052  else if (INFILE(_LT_EPL10ref_1) || INFILE(_LT_EPL10ref_2) || HASTEXT(_LT_EPL10ref_3, REG_EXTENDED)) {
5053  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-1.0");
5054  }
5055  else if (INFILE(_LT_EPLref)) {
5056  if (INFILE(_TITLE_EPL10)) {
5057  INTERESTING(lDebug ? "Eclipse(v.0#2)" : "EPL-1.0");
5058  }
5059  else if (INFILE(_TITLE_EPL20)) {
5060  INTERESTING(lDebug ? "Eclipse(v.2#2)" : "EPL-2.0");
5061  }
5062  else {
5063  INTERESTING(lDebug ? "Eclipse(#2)" : "EPL");
5064  }
5065  }
5066  else if (INFILE(_LT_EPL10ref_1)) {
5067  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-1.0");
5068  }
5069  else if (INFILE(_LT_EPL) && NOT_INFILE(_TITLE_EPL_IGNORE)) {
5070  if (INFILE(_TITLE_EPL10ref_1)) {
5071  INTERESTING(lDebug ? "Eclipse(v1.0#2)" : "EPL-1.0");
5072  }
5073  if (INFILE(_TITLE_EPL20ref_1)) {
5074  INTERESTING(lDebug ? "Eclipse(v1.0#2)" : "EPL-2.0");
5075  }
5076  }
5077  }
5079  /*
5080  * SyBase/Watcom
5081  */
5082  if (INFILE(_LT_SYBASE)) {
5083  if (INFILE(_TITLE_SYBASE10)) {
5084  INTERESTING("Watcom-1.0");
5085  }
5086  else {
5087  INTERESTING("Watcom");
5088  }
5089  }
5091  /*
5092  * Ricoh
5093  */
5094  if (INFILE(_LT_RICOH)) {
5095  if (INFILE(_TITLE_RICOH10)) {
5096  INTERESTING("RSCPL");
5097  }
5098  }
5100  /*
5101  * OCLC
5102  */
5103  if (INFILE(_LT_OCLC)) {
5104  if (INFILE(_TITLE_OCLC20)) {
5105  INTERESTING("OCLC-2.0");
5106  }
5107  else if (INFILE(_TITLE_OCLC10)) {
5108  INTERESTING("OCLC-1.0");
5109  }
5110  else {
5111  INTERESTING("OCLC");
5112  }
5113  }
5115  /*
5116  * Educational Community License
5117  */
5118  if (INFILE(_LT_ECL1)) {
5119  INTERESTING("ECL-1.0");
5120  lmem[_mMIT] = 1;
5121  }
5122  else if (INFILE(_LT_ECL2)) {
5123  INTERESTING("ECL-2.0");
5124  lmem[_mMIT] = 1;
5125  }
5126  else if (INFILE(_LT_ECL)) {
5127  INTERESTING(lDebug ? "ECL(1)" : "ECL-1.0");
5128  lmem[_mMIT] = 1;
5129  }
5131  /*
5132  * EU DataGrid and Condor PL
5133  */
5134  if (INFILE(_LT_EU)) {
5135  if (INFILE(_TITLE_CONDOR_V10)) {
5136  INTERESTING("Condor-1.0");
5137  } else if (INFILE(_TITLE_CONDOR_V11)) {
5138  INTERESTING("Condor-1.1");
5139  }
5140  else {
5141  INTERESTING("EUDatagrid");
5142  }
5143  }
5144  else if (URL_INFILE(_URL_EUDatagrid)) {
5145  INTERESTING("EUDatagrid");
5146  }
5148  /*
5149  * Adaptive Public License
5150  */
5151  if (INFILE(_LT_ADAPTIVE)) {
5152  if (INFILE(_TITLE_ADAPTIVE10)) {
5153  INTERESTING("APL-1.0");
5154  }
5155  else {
5156  INTERESTING("APL");
5157  }
5158  lmem[_fAPL] = 1;
5159  }
5161  /*
5162  * gSOAP Public License
5163  */
5164  if (!lmem[_mGSOAP] && INFILE(_LT_GSOAPref13)) {
5165  INTERESTING("gSOAP-1.3b");
5166  }
5167  else if (!lmem[_mGSOAP] && INFILE(_LT_GSOAPref)) {
5168  INTERESTING("gSOAP");
5169  }
5171  /*
5172  * Computer Associates
5173  */
5174  if (INFILE(_LT_CA)) {
5175  if (INFILE(_TITLE_CA11)) {
5176  INTERESTING("CATOSL-1.1");
5177  }
5178  else {
5179  INTERESTING("CA");
5180  }
5181  }
5182  else if (INFILE(_TITLE_CA)) {
5183  INTERESTING("CATOSL");
5184  }
5186  /*
5187  * Frameworx
5188  */
5189  if (INFILE(_LT_FRAMEWORX)) {
5190  if (INFILE(_TITLE_FRAMEWORX10)) {
5191  INTERESTING("Frameworx-1.0");
5192  }
5193  else {
5194  INTERESTING("Frameworx");
5195  }
5196  }
5198  /*
5199  * NASA
5200  */
5201  if (INFILE(_LT_NASA)) {
5202  if (INFILE(_TITLE_NASA13)) {
5203  INTERESTING("NASA-1.3");
5204  }
5205  else {
5206  INTERESTING("NASA");
5207  }
5208  }
5210  /*
5211  * Freetype
5212  */
5213  if (INFILE(_LT_FREETYPE)) {
5214  if (INFILE(_TITLE_CATHARON)) {
5215  INTERESTING(lDebug ? "Catharon(1)" : "Catharon");
5216  }
5217  else if (INFILE(_CR_CATHARON)) {
5218  INTERESTING(lDebug ? "Catharon(2)" : "Catharon");
5219  }
5220  else if (INFILE(_TITLE_FREETYPE)) {
5221  INTERESTING("FTL");
5222  }
5223  else {
5224  INTERESTING("FTL-style");
5225  }
5226  }
5227  else if (INFILE(_LT_FTL)) {
5228  INTERESTING("FTL");
5229  }
5230  else if (INFILE(_TITLE_FTL)|| INFILE(_SPDX_FTL)) {
5231  INTERESTING("FTL");
5232  }
5233  else if (INFILE(_LT_CATHARON)) {
5234  INTERESTING(lDebug ? "Catharon(3)" : "Catharon");
5235  }
5236  else if (INFILE(_LT_FREETYPEref)) {
5237  INTERESTING(lDebug ? "FTL(ref)" : "FTL");
5238  }
5240  /*
5241  * Eiffel Forum License
5242  */
5243  if (INFILE(_LT_EIFFEL)) {
5244  if (INFILE(_TITLE_EIFFEL2)) {
5245  INTERESTING("EFL-2.0");
5246  }
5247  else if (INFILE(_TITLE_EIFFEL1)) {
5248  INTERESTING("EFL-1.0");
5249  }
5250  else {
5251  INTERESTING("EFL");
5252  }
5253  }
5254  else if (INFILE(_LT_EIFFEL_20)) {
5255  INTERESTING("EFL-2.0");
5256  }
5257  else if (INFILE(_LT_EIFFEL_1)) {
5258  INTERESTING("EFL");
5259  }
5261  /*
5262  * BISON, Nethack, etc.
5263  */
5264  if (!lmem[_fGPL] && (INFILE(_LT_BISON) || INFILE(_LT_BISONref))) {
5265  if (INFILE(_TITLE_NETHACK)) {
5266  INTERESTING("NGPL");
5267  }
5268  else {
5269  INTERESTING("BISON");
5270  }
5271  }
5273  /*
5274  * Open Software License (OSL) and Academic Free License (AFL) are similar
5275  */
5276  if (INFILE(_LT_OSL_BAD)) {
5277  cp = (INFILE(_TITLE_AFL) ? AFLVERS() : OSLVERS());
5278  INTERESTING(lDebug? "OSL(bad)" : cp);
5279  }
5280  else if (INFILE(_LT_OSLref1)) {
5281  cp = OSLVERS();
5282  INTERESTING(lDebug? "OSL(ref1)" : cp);
5283  }
5284  else if (INFILE(_LT_OSLref2)) {
5285  cp = OSLVERS();
5286  INTERESTING(lDebug? "OSL(ref2)" : cp);
5287  }
5288  else if (INFILE(_LT_AFL)) {
5289  cp = (INFILE(_TITLE_AFL) ? AFLVERS() : OSLVERS());
5290  INTERESTING(lDebug? "AFL#1" : cp);
5291  }
5292  else if (INFILE(_TITLE_OSL21) && NOT_INFILE(_TITLE_OSL21_EXHIBIT)) {
5293  cp = OSLVERS();
5294  INTERESTING(lDebug? "OSL(T2.1)" : cp);
5295  }
5296  else if (INFILE(_TITLE_AFL21)) {
5297  cp = AFLVERS();
5298  INTERESTING(lDebug? "AFL(T2.1)" : cp);
5299  }
5300  else if (INFILE(_TITLE_OSL30) && NOT_INFILE(_TITLE_OSL30_EXHIBIT)) {
5301  cp = OSLVERS();
5302  INTERESTING(lDebug? "OSL(T3.0)" : cp);
5303  }
5304  else if (INFILE(_TITLE_AFL30)) {
5305  cp = AFLVERS();
5306  INTERESTING(lDebug? "AFL(T3.0)" : cp);
5307  }
5308  else if (URL_INFILE(_URL_OSL11)) {
5309  INTERESTING(lDebug ? "OSL_v1.1(url)" : "OSL-1.1");
5310  }
5311  else if (URL_INFILE(_URL_OSL)) {
5312  INTERESTING(lDebug ? "OSL(url)" : "OSL");
5313  }
5314  else if (URL_INFILE(_URL_AFL)) {
5315  INTERESTING(lDebug ? "AFL(url)" : "AFL");
5316  }
5318  /*
5319  * There are occasions where something is licensed under *either* AFL
5320  * or OSL, so don't keep AFL-refs in the if-then-else-if chain here.
5321  */
5322  if (INFILE(_LT_AFLref1)) {
5323  cp = AFLVERS();
5324  INTERESTING(lDebug? "AFL(ref1)" : cp);
5325  }
5326  else if (INFILE(_LT_AFLref2)) {
5327  cp = AFLVERS();
5328  INTERESTING(lDebug? "AFL(ref2)" : cp);
5329  }
5331  /*
5332  * Inner Net license
5333  */
5334  if (INFILE(_LT_INNERNET)) {
5335  if (INFILE(_TITLE_INNERNET200)) {
5336  INTERESTING("InnerNet-2.00");
5337  }
5338  else if (HASTEXT(_TEXT_INNERNET, 0)) {
5339  INTERESTING("InnerNet");
5340  }
5341  else {
5342  INTERESTING("InnerNet-style");
5343  }
5344  }
5345  else if (INFILE(_LT_INNERNETref_V2)) {
5346  INTERESTING(lDebug ? "InnetNet(v2ref)" : "InnerNet-2.00");
5347  }
5349  /*
5350  * Open Government Licence
5351  */
5352  if (INFILE(_TITLE_OGL_UK)) {
5353  if (INFILE(_TITLE_OGL_UK_10)) {
5354  INTERESTING("OGL-UK-1.0");
5355  }
5356  else if (INFILE(_TITLE_OGL_UK_20)) {
5357  INTERESTING("OGL-UK-2.0");
5358  }
5359  else if (INFILE(_TITLE_OGL_UK_30)) {
5360  INTERESTING("OGL-UK-3.0");
5361  }
5362  /* Full OGL license texts have reference to Creative Commons */
5363  if (HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
5364  lmem[_fCCBY] = 1;
5365  }
5366  }
5368  /*
5369  * Creative Commons Public License, Mindterm, and the Reciprocal PL
5370  */
5371  if (!lmem[_fCCBY] && HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
5372  cp = CCVERS();
5373  INTERESTING(lDebug ? "CC(ref)" : cp);
5374  }
5375  else if (INFILE(_LT_CCPL)) {
5376  if (INFILE(_LT_RECIP_1) || INFILE(_LT_RECIP_2)) {
5377  if (INFILE(_TITLE_RPL15)) {
5378  INTERESTING(lDebug ? "RPL-1.5#1" : "RPL-1.5");
5379  }
5380  else if (INFILE(_TITLE_RPL11)) {
5381  INTERESTING(lDebug ? "RPL-1.1#1" : "RPL-1.1");
5382  }
5383  else if (INFILE(_TITLE_RPL10)) {
5384  INTERESTING(lDebug ? "RPL-1.0#1" : "RPL-1.0");
5385  }
5386  else {
5387  INTERESTING(lDebug ? "RPL#1" : "RPL");
5388  }
5389  }
5390  }
5391  else if (INFILE(_LT_RECIP15)) {
5392  INTERESTING("RPL-1.5");
5393  }
5394  else if (INFILE(_TITLE_MINDTERM)) {
5395  INTERESTING("MindTerm");
5396  }
5397  else if (INFILE(_LT_RECIP_1) || INFILE(_LT_RECIP_2)) {
5398  if (INFILE(_TITLE_RPL15)) {
5399  INTERESTING(lDebug ? "RPL-1.5#2" : "RPL-1.5");
5400  }
5401  else if (INFILE(_TITLE_RPL11)) {
5402  INTERESTING(lDebug ? "RPL-1.1#2" : "RPL-1.1");
5403  }
5404  else if (INFILE(_TITLE_RPL10)) {
5405  INTERESTING(lDebug ? "RPL-1.0#2" : "RPL-1.0");
5406  }
5407  else {
5408  INTERESTING(lDebug ? "RPL#2" : "RPL");
5409  }
5410  }
5411  /*
5412  * For some reason license text strings were defined for few
5413  * Creative Commons licenses.
5414  */
5415  else if (INFILE(_LT_CC_BY_SA_30)) {
5416  INTERESTING("CC-BY-SA-3.0");
5417  }
5418  else if (INFILE(_LT_CC_BY_SA_25)) {
5419  INTERESTING("CC-BY-SA-2.5");
5420  }
5421  else if (INFILE(_LT_CC_BY_NC_30)) {
5422  INTERESTING("CC-BY-NC-3.0");
5423  }
5424  else if (INFILE(_LT_CC_BY_ND_30)) {
5425  INTERESTING("CC-BY-ND-3.0");
5426  }
5428  if (URL_INFILE(_URL_RPL)) {
5429  INTERESTING(lDebug ? "RPL(url)" : "RPL");
5430  }
5431  else if (URL_INFILE(_URL_CCLGPL)) {
5432  cp = LGPLVERS();
5433  INTERESTING(lDebug ? "CC-LGPL(url)" : cp);
5434  }
5435  else if (URL_INFILE(_URL_CCGPL)) {
5436  cp = GPLVERS();
5437  INTERESTING(lDebug ? "CC-GPL(url)" : cp);
5438  }
5440  /*
5441  * SpikeSource
5442  */
5443  if (INFILE(_CR_SPIKESOURCE) && INFILE(_LT_SPIKESOURCE)) {
5444  INTERESTING("SpikeSource");
5445  }
5447  /*
5448  * Legato systems
5449  */
5450  if (INFILE(_LT_LEGATO_1) || INFILE(_LT_LEGATO_2)) {
5451  INTERESTING("Legato");
5452  }
5454  /*
5455  * Paradigm associates
5456  */
5457  if (INFILE(_LT_PARADIGM) && INFILE(_CR_PARADIGM)) {
5458  INTERESTING("Paradigm");
5459  }
5461  /*
5462  * Wintertree Software
5463  */
5464  if (INFILE(_LT_WINTERTREE)) {
5465  INTERESTING("Wintertree");
5466  }
5468  /*
5469  * Genivia
5470  */
5471  if (INFILE(_LT_GENIVIAref)) {
5472  INTERESTING("Genivia.Commercial");
5473  }
5475  /*
5476  * Open Directory License
5477  */
5478  if (INFILE(_LT_ODL)) {
5479  INTERESTING("ODL");
5480  }
5482  /*
5483  * Open Directory License
5484  */
5485  if (INFILE(_LT_OSD)) {
5486  INTERESTING("OSD");
5487  }
5489  /*
5490  * Zveno
5491  */
5492  if (INFILE(_LT_ZVENO) && INFILE(_CR_ZVENO)) {
5493  INTERESTING("Zveno");
5494  }
5496  /*
5497  * Brainstorm
5498  */
5499  if (INFILE(_LT_BRAINSTORM_EULA) && INFILE(_TITLE_BRAINSTORM_EULA)) {
5500  INTERESTING("BrainStorm-EULA");
5501  }
5503  /*
5504  * AOL
5505  */
5506  if (INFILE(_LT_AOL_EULA)) {
5507  INTERESTING("AOL-EULA");
5508  }
5510  /*
5511  * Algorithmics
5512  */
5513  if (INFILE(_LT_ALGORITHMICS)) {
5514  INTERESTING("Algorithmics");
5515  }
5517  /*
5518  * Pixware
5519  */
5520  if (INFILE(_LT_PIXWARE_EULA)) {
5521  INTERESTING("Pixware-EULA");
5522  }
5524  /*
5525  * Compuserve
5526  */
5527  if (HASTEXT(_TEXT_COMPUSERVE, 0) && INFILE(_LT_COMPUSERVE)) {
5528  INTERESTING("CompuServe");
5529  }
5531  /*
5532  * Advanved Micro Devices (AMD)
5533  */
5534  if (INFILE(_CR_AMD) && INFILE(_LT_AMD)) {
5535  INTERESTING("AMD");
5536  }
5537  else if (INFILE(_LT_AMD_EULA) && INFILE(_TITLE_AMD_EULA)) {
5538  INTERESTING("AMD-EULA");
5539  }
5541  /*
5542  * OMRON Corp
5543  */
5544  if ((INFILE(_CR_OMRON_1) || INFILE(_CR_OMRON_2)) &&
5545  (INFILE(_LT_OMRON1) || INFILE(_LT_OMRON2))) {
5546  INTERESTING(lDebug ? "OMRON(2)" : "OMRON");
5547  }
5549  /*
5550  * MetroLink
5551  */
5552  if (INFILE(_TITLE_METROLINK)) {
5553  if (INFILE(_LT_METRO)) {
5554  if (INFILE(_LT_METRO_NONFREE)) {
5555  INTERESTING("MetroLink-nonfree");
5556  }
5557  else {
5558  INTERESTING("MetroLink");
5559  }
5560  }
5561  }
5562  else if (INFILE(_LT_METROLINKref)) {
5563  INTERESTING(lDebug ? "MetroLink(ref)" : "MetroLink");
5564  }
5566  /*
5567  * University of Edinburgh (and a CMU derivative)
5568  */
5569  if (INFILE(_LT_EDINBURGH_1)) {
5570  if (mCR_CMU()) {
5571  INTERESTING(lDebug ? "CMU(3)" : "CMU");
5572  lmem[_mCMU] = 1;
5573  }
5574  else if (mCR_EDIN()) {
5575  INTERESTING(lDebug ? "U-Edinburgh(1)" : "U-Edinburgh");
5576  }
5577  else {
5578  INTERESTING(lDebug ? "UE-style(1)" : "U-Edinburgh-style");
5579  }
5580  }
5581  else if (INFILE(_LT_EDINBURGH_2)) {
5582  if (mCR_EDIN()) {
5583  INTERESTING(lDebug ? "U-Edinburgh(2)" : "U-Edinburgh");
5584  }
5585  else {
5586  INTERESTING(lDebug ? "UE-style(2)" : "U-Edinburgh-style");
5587  }
5588  }
5590  /*
5591  * Older CMU (including the weird "fnord" text) licenses.
5592  * Note that SPDX listed MIT-CMU license is detected earlier.
5593  */
5594  if (!lmem[_mCMU] && INFILE(_LT_CMU_1)) {
5595  if (!lmem[_mREDHAT] && INFILE(_CR_REDHAT)) {
5596  INTERESTING(lDebug ? "RH(5)" : "RedHat");
5597  lmem[_mREDHAT] = 1;
5598  }
5599  else if (INFILE(_CR_NRL)) {
5600  INTERESTING("NRL");
5601  }
5602  else if (!lmem[_mCMU] && mCR_CMU()) {
5603  INTERESTING(lDebug ? "CMU(5)" : "CMU");
5604  lmem[_mCMU] = 1;
5605  }
5606  else {
5607  INTERESTING("CMU-style");
5608  lmem[_mCMU] = 1;
5609  }
5610  }
5611  else if (!lmem[_mCMU] && INFILE(_LT_CMU_2) && mCR_CMU()) {
5612  INTERESTING(lDebug ? "CMU(6)" : "CMU");
5613  lmem[_mCMU] = 1;
5614  }
5615  else if (INFILE(_LT_CMU_3)) {
5616  INTERESTING(lDebug ? "CMU(7)" : "CMU");
5617  lmem[_mCMU] = 1;
5618  }
5619  else if (INFILE(_LT_CMU_4)) {
5620  INTERESTING(lDebug ? "CMU(8)" : "CMU");
5621  lmem[_mCMU] = 1;
5622  }
5623  else if (INFILE(_LT_CMU_5)) {
5624  INTERESTING(lDebug ? "CMU(9)" : "CMU");
5625  lmem[_mCMU] = 1;
5626  }
5627  else if (INFILE(_LT_CMU_6)) {
5628  INTERESTING(lDebug ? "CMU(10)" : "CMU");
5629  lmem[_mCMU] = 1;
5630  }
5632  /*
5633  * University of Chicago
5634  */
5635  if (INFILE(_CR_UCHICAGO) && INFILE(_LT_UCHICAGO)) {
5636  INTERESTING("U-Chicago");
5637  }
5639  /*
5640  * University of Utah
5641  */
5642  if (INFILE(_CR_UUTAH) && INFILE(_LT_UUTAH)) {
5643  INTERESTING("U-Utah");
5644  }
5646  /*
5647  * University of British Columbia
5648  */
5649  if (INFILE(_CR_UBC) && INFILE(_LT_UBC)) {
5650  INTERESTING("U-BC");
5651  }
5653  /*
5654  * ImageMagick Studios - DON'T RECALL THE TEXT FOR THIS LICENSE!
5655  */
5656  if (INFILE(_LT_IMAGEMAGICK)) {
5657  if (INFILE(_CR_IMAGEMAGICK)) {
5658  INTERESTING("ImageMagick");
5659  }
5660  else {
5661  INTERESTING("ImageMagick-style");
5662  }
5663  }
5664  else if (URL_INFILE(_URL_IMAGEMAGICK)) {
5665  INTERESTING(lDebug ? "ImageMagick(url)" : "ImageMagick");
5666  }
5668  /*
5669  * Riverbank
5670  */
5671  if (INFILE(_LT_RIVERBANK) && INFILE(_TITLE_RIVERBANK_EULA)) {
5672  INTERESTING("Riverbank-EULA");
5673  }
5675  /*
5676  * Polyserve
5677  */
5678  if (INFILE(_CR_POLYSERVE) && INFILE(_LT_POLYSERVE)) {
5679  INTERESTING("Polyserve-CONFIDENTIAL");
5680  }
5682  /*
5683  * Fujitsu Limited
5684  */
5685  if (INFILE(_CR_FUJITSU) && INFILE(_LT_FUJITSU)) {
5686  INTERESTING("Fujitsu");
5687  }
5689  /*
5690  * Cypress Semiconductor
5691  */
5692  if (INFILE(_CR_CYPRESS) && INFILE(_LT_CYPRESS)) {
5693  INTERESTING("Cypress-FW");
5694  }
5695  /*
5696  * Keyspan
5697  */
5698  else if (INFILE(_CR_KEYSPAN) && INFILE(_LT_KEYSPAN)) {
5699  INTERESTING("Keyspan-FW");
5700  }
5701  /*
5702  * ATMEL
5703  */
5704  else if (INFILE(_CR_ATMEL) && INFILE(_LT_ATMEL)) {
5705  INTERESTING("ATMEL-FW");
5706  }
5708  /*
5709  * Quest Software
5710  */
5711  if (INFILE(_LT_QUEST_EULA) && INFILE(_TITLE_QUEST_EULA)) {
5712  INTERESTING("Quest-EULA");
5713  }
5715  /*
5716  * International Organization for Standarization
5717  */
5718  if (INFILE(_LT_IOS) && INFILE(_CR_IOS)) {
5719  INTERESTING("IOS");
5720  }
5722  /*
5723  * Garmin Ltd.
5724  */
5725  if (INFILE(_LT_GARMIN_EULA) && INFILE(_TITLE_GARMIN_EULA)) {
5726  INTERESTING("Garmin-EULA");
5727  }
5729  /*
5730  * AVM GmbH
5731  */
5732  if (INFILE(_CR_AVM)) {
5733  if (INFILE(_LT_AVM_1)) {
5734  INTERESTING(lDebug ? "AVM(1)" : "AVM");
5735  }
5736  else if (INFILE(_LT_AVM_2)) {
5737  INTERESTING(lDebug ? "AVM(2)" : "AVM");
5738  }
5739  }
5740  else if (INFILE(_LT_AVM_3)) {
5741  INTERESTING(lDebug ? "AVM(3)" : "AVM");
5742  }
5744  /*
5745  * Fair license
5746  */
5747  if (INFILE(_LT_FAIR)) {
5748  if (INFILE(_TITLE_FAIR)) {
5749  INTERESTING("Fair");
5750  }
5751  else {
5752  INTERESTING("Fair-style");
5753  }
5754  }
5756  /*
5757  * GCA (Majordomo)
5758  */
5759  if (INFILE(_LT_GCA)) {
5760  if (INFILE(_TITLE_MAJORDOMO11)) {
5761  INTERESTING("Majordomo-1.1");
5762  }
5763  else {
5764  INTERESTING("Majordomo");
5765  }
5766  }
5768  /*
5769  * Zeus Technology -- this one is kind of a corner-case since the wording
5770  * is VERY general. If there's a Zeus copyright with the license text,
5771  * spell it out; else, look for the same text in the "generic" section.
5772  */
5773  if (INFILE(_CR_ZEUS) && INFILE(_LT_ZEUS)) {
5774  INTERESTING("Zeus");
5775  }
5777  /*
5778  * Information-technology promotion agency
5779  */
5780  if (!lmem[_mXOPEN] && INFILE(_LT_XOPEN_1)) {
5781  if (!lmem[_mOSF] && INFILE(_CR_OSF)) {
5782  INTERESTING(lDebug ? "OSF(2)" : "OSF");
5783  lmem[_mOSF] = 1;
5784  }
5785  else if (INFILE(_CR_UI)) {
5786  INTERESTING(lDebug ? "UI(2)" : "Unix-Intl");
5787  }
5788  else if (INFILE(_CR_XOPEN)) {
5789  INTERESTING(lDebug ? "XOpen(2)" : "X/Open");
5790  lmem[_mXOPEN] = 1;
5791  }
5792  else if (INFILE(_CR_IPA)) {
5793  INTERESTING("IPA");
5794  }
5795  else if (!lmem[_mSUN] && INFILE(_CR_SUN)) {
5796  INTERESTING(lDebug ? "Sun(10)" : "Sun");
5797  lmem[_mSUN] = 1;
5798  }
5799  else {
5800  INTERESTING("X/Open-style");
5801  }
5802  }
5803  /* This one is funky - it includes part of the copyright */
5804  else if (!lmem[_mXOPEN] && INFILE(_LT_XOPEN_2)) {
5805  INTERESTING(lDebug ? "XOpen(3)" : "X/Open");
5806  lmem[_mXOPEN] = 1;
5807  }
5809  /*
5810  * Interlink networks EULA (seen in HP proprietary code)
5811  */
5812  if (INFILE(_LT_INTERLINK_EULA) && INFILE(_TITLE_INTERLINK_EULA)) {
5813  INTERESTING("Interlink-EULA");
5814  }
5816  /*
5817  * Mellanox Technologies
5818  */
5819  if (INFILE(_LT_MELLANOX) && INFILE(_CR_MELLANOX)) {
5820  INTERESTING("Mellanox");
5821  }
5823  /*
5824  * nCipher Corp
5825  */
5826  if (INFILE(_LT_NCIPHER) && INFILE(_CR_NCIPHER)) {
5827  INTERESTING("nCipher");
5828  }
5830  /*
5831  * Distributed Processing Technology Corp
5832  */
5833  if (INFILE(_CR_DPTC) && INFILE(_LT_DPTC)) {
5834  INTERESTING("DPTC");
5835  }
5836  /*
5837  * Distributed Management Task Force
5838  */
5839  else if (HASTEXT(_TEXT_REPRODUCED, 0) && INFILE(_CR_DMTF) &&
5840  INFILE(_LT_DMTF)) {
5841  INTERESTING("DMTF");
5842  lmem[_fATTRIB] = 1;
5843  }
5845  /*
5846  * DSC Technologies Corp
5847  */
5848  if (INFILE(_CR_DSCT) && INFILE(_LT_DSCT)) {
5849  INTERESTING("DSCT");
5850  }
5852  /*
5853  * Epinions, Inc.
5854  */
5855  if (INFILE(_CR_EPINIONS) && INFILE(_LT_EPINIONS)) {
5856  INTERESTING("Epinions");
5857  }
5859  /*
5860  * MITEM, Ltd
5861  */
5862  if (INFILE(_CR_MITEM) && INFILE(_LT_MITEM)) {
5863  INTERESTING("MITEM");
5864  }
5866  /*
5867  * Cylink corp
5868  */
5869  if ((INFILE(_LT_CYLINK_ISC_1) || INFILE(_LT_CYLINK_ISC_2))) {
5870  INTERESTING("Cylink-ISC");
5871  }
5873  /*
5874  * SciTech software
5875  */
5876  if (INFILE(_CR_SCITECH) && INFILE(_LT_SCITECH)) {
5877  INTERESTING("SciTech");
5878  }
5880  /*
5881  * OReilly and Associates
5882  */
5883  if (INFILE(_LT_OREILLY_1)) {
5884  if (INFILE(_CR_OREILLY)) {
5885  INTERESTING("OReilly");
5886  }
5887  else {
5888  INTERESTING("OReilly-style");
5889  }
5890  }
5891  else if (INFILE(_LT_OREILLY_2)) {
5892  if (INFILE(_CR_OREILLY)) {
5893  INTERESTING(lDebug ? "OReilly-2" : "OReilly");
5894  }
5895  else {
5896  INTERESTING(lDebug ? "OReilly-st-2" : "OReilly-style");
5897  }
5898  }
5900  /*
5901  * Bit-Torrent
5902  */
5903  if (INFILE(_LT_BITTORRENT)) {
5904  if (INFILE(_TITLE_BITTORRENT11)) {
5905  INTERESTING("BitTorrent-1.1");
5906  }
5907  else if (INFILE(_TITLE_BITTORRENT10)) {
5908  INTERESTING("BitTorrent-1.0");
5909  }
5910  else {
5911  INTERESTING("BitTorrent");
5912  }
5913  }
5914  else if (INFILE(_LT_BITTORRENT_V11)) {
5915  INTERESTING("BitTorrent-1.1");
5916  }
5917  else if (INFILE(_LT_BITTORRENT_V10)) {
5918  INTERESTING("BitTorrent-1.0");
5919  }
5920  else if (INFILE(_LT_BITTORRENTref)) {
5921  INTERESTING(lDebug ? "BitTorrent(ref)" : "BitTorrent");
5922  }
5924  /*
5925  * Open Software Foundation
5926  */
5927  if (INFILE(_LT_OSF_1)) {
5928  if (INFILE(_CR_OSF)) {
5929  INTERESTING(lDebug ? "OSF(3)" : "OSF");
5930  lmem[_mOSF] = 1;
5931  }
5932  else {
5933  INTERESTING(lDebug ? "OSF-style(1)" : "OSF-style");
5934  }
5935  }
5936  else if (INFILE(_LT_OSF_2)) {
5937  if (INFILE(_CR_OSF)) {
5938  INTERESTING(lDebug ? "OSF(4)" : "OSF");
5939  lmem[_mOSF] = 1;
5940  }
5941  else if (INFILE(_LT_CMU_8)) {
5942  INTERESTING(lDebug ? "CMU(11)" : "CMU");
5943  }
5944  else {
5945  INTERESTING(lDebug ? "OSF-style(2)" : "OSF-style");
5946  }
5947  }
5949  /*
5950  * OpenLDAP (if not already determined above -- the OpenLDAP public license
5951  * borrows text from LOTS of different sources)
5952  */
5953  if (!lmem[_fBSD] && lmem[_tOPENLDAP] && !lmem[_fOPENLDAP]) {
5954  if (INFILE(_LT_OPENLDAP_1)) {
5955  if (!TRYGROUP(famOPENLDAP)) {
5956  INTERESTING("OLDAP-style");
5957  }
5958  }
5959  else if (INFILE(_LT_OPENLDAP_2)) {
5960  INTERESTING("OLDAP");
5961  }
5962  }
5964  /*
5965  * The Knuth license is sufficiently bizarre enough it belongs down here,
5966  * towards the end of the search
5967  *****
5968  * Lachman Associates - includes a proprietary-to-the-max paragraph
5969  * IoSoft Ltd.
5970  */
5971  if (INFILE(_CR_KNUTH) && INFILE(_LT_KNUTH_1)) {
5972  INTERESTING(lDebug ? "Knuth(1)" : "D.E.Knuth");
5973  }
5974  else if (INFILE(_LT_KNUTH_2)) {
5975  INTERESTING(lDebug ? "Knuth(2)" : "D.E.Knuth");
5976  }
5977  else if (INFILE(_LT_KNUTH_STYLE)) {
5978  INTERESTING("Knuth-style");
5979  }
5980  else if (INFILE(_LT_LACHMAN_SECRET)) {
5981  INTERESTING("Lachman-Proprietary");
5982  }
5983  else if (INFILE(_LT_IOSOFT_SRCONLY)) {
5984  INTERESTING("IoSoft.COMMERCIAL");
5985  }
5987  /*
5988  * The Free Software License
5989  */
5990  if (INFILE(_LT_FREE_SW)) {
5991  INTERESTING("Free-SW");
5992  }
5993  /*
5994  * NOT free software and explicitly free software
5995  */
5996  else if (INFILE(_PHR_NOT_FREE_SW)) {
5997  if (INFILE(_LT_NOT_FREE) && INFILE(_CR_WTI)) {
5998  INTERESTING("WTI.Not-free");
5999  }
6000  else {
6001  INTERESTING("Not-Free");
6002  }
6003  }
6005  /*
6006  * Code Project Open License
6007  */
6008  if (INFILE(_LT_CPOL)) {
6009  if (HASTEXT(_LT_CPOL_V102, REG_EXTENDED)) {
6010  INTERESTING("CPOL-1.02");
6011  } else {
6012  INTERESTING("CPOL");
6013  }
6014  }
6016  /*
6017  * Macrovision
6018  */
6019  if (INFILE(_LT_MACROV_IA) && INFILE(_PHR_MACROVISION)) {
6020  if (INFILE(_PHR_EULA)) {
6021  INTERESTING("Macrovision-EULA");
6022  }
6023  else {
6024  INTERESTING("Macrovision");
6025  }
6026  }
6028  /*
6029  * VMware
6030  */
6031  if (INFILE(_LT_VMWARE) && INFILE(_TITLE_VMWARE)) {
6032  INTERESTING("VMware-EULA");
6033  }
6035  /*
6036  * UCWARE.com
6037  */
6038  if (INFILE(_LT_UCWARE_EULA_1) || INFILE(_LT_UCWARE_EULA_2)) {
6039  INTERESTING("UCWare-EULA");
6040  }
6042  /*
6043  * InfoSeek Corp
6044  */
6045  if (INFILE(_LT_INFOSEEK) && INFILE(_CR_INFOSEEK)) {
6046  INTERESTING("InfoSeek");
6047  }
6049  /*
6050  * Trident Microsystems
6051  */
6052  if (INFILE(_LT_TRIDENT_EULA) && INFILE(_CR_TRIDENT)) {
6053  INTERESTING("Trident-EULA");
6054  }
6056  /*
6057  * ARJ Software Inc
6058  */
6059  if (INFILE(_LT_ARJ) && INFILE(_CR_ARJ)) {
6060  INTERESTING("ARJ");
6061  }
6063  /*
6064  * Piriform Ltd
6065  */
6066  if (INFILE(_LT_PIRIFORM) && INFILE(_CR_PIRIFORM)) {
6067  INTERESTING("Piriform");
6068  }
6070  /*
6071  * Design Science License (DSL)
6072  */
6073  if (INFILE(_LT_DSL)) {
6074  INTERESTING("DSL");
6075  }
6077  /*
6078  * Skype
6079  */
6080  if (INFILE(_TITLE_SKYPE) && INFILE(_LT_SKYPE)) {
6081  INTERESTING("Skype-EULA");
6082  }
6084  /*
6085  * Hauppauge
6086  */
6087  if (INFILE(_LT_HAUPPAUGE)) {
6088  INTERESTING("Hauppauge");
6089  }
6091  /*
6092  * Platform Computing Corp (or a generic on-your-intranet-only restriction)
6093  */
6094  if (INFILE(_LT_INTRANET_ONLY)) {
6095  if (INFILE(_CR_PLATFORM_COMP)) {
6096  INTERESTING(lDebug ? "Platfm(1)" : "Platform-Computing(RESTRICTED)");
6097  } else {
6098  MEDINTEREST("Intranet-only");
6099  }
6100  } else if (INFILE(_LT_NOT_INTERNET)) {
6101  if (INFILE(_CR_PLATFORM_COMP)) {
6102  INTERESTING(lDebug ? "Platfm(2)" : "Platform-Computing(RESTRICTED)");
6103  } else {
6104  MEDINTEREST("Not-Internet");
6105  }
6106  }
6108  /*
6109  * Curl
6110  */
6111  if (URL_INFILE(_URL_CURL)) {
6112  INTERESTING(lDebug ? "Curl(URL)" : "curl");
6113  }
6115  /*
6116  * ID Software
6117  */
6118  if (INFILE(_LT_ID_EULA)) {
6119  INTERESTING("ID-EULA");
6120  }
6122  /*
6123  * M+ Fonts Project
6124  */
6125  if (INFILE(_LT_MPLUS_FONT) && INFILE(_CR_MPLUS)) {
6126  INTERESTING("M-Plus-Project");
6127  }
6129  /*
6130  * Powder Development
6131  */
6132  if (INFILE(_LT_POWDER)) {
6133  INTERESTING("Powder-Proprietary");
6134  }
6136  /*
6137  * Against DRM
6138  */
6139  if (INFILE(_LT_AGAINST_DRM)) {
6140  INTERESTING("AgainstDRM");
6141  }
6143  /*
6144  * The TeXinfo exception clause
6145  */
6146  if (INFILE(_LT_TEX_EXCEPT)) {
6147  INTERESTING(lDebug ? "TeX-except" : "TeX-exception");
6148  }
6150  /*
6151  * The U.S. Gummint
6152  */
6153  if (INFILE(_LT_USGOVT_1)) {
6154  if (INFILE(_CR_URA)) {
6155  MEDINTEREST("URA.govt");
6156  }
6157  else {
6158  MEDINTEREST(lDebug ? "Govt-Wk(1)" : "Govt-work");
6159  }
6160  }
6161  else if (INFILE(_LT_USGOVT_2)) {
6162  /*
6163  * mpich2
6164  */
6165  if (INFILE(_LT_MPICH2)) {
6166  INTERESTING("mpich2");
6167  }
6168  else {
6169  MEDINTEREST(lDebug ? "Govt-Wk(2)" : "Govt-work");
6170  }
6171  }
6172  else if (INFILE(_LT_USGOVT_RIGHTS1) && INFILE(_LT_PUBLIC)) {
6173  MEDINTEREST(lDebug ? "US-Govt(1)" : "Govt-rights");
6174  }
6175  else if (INFILE(_LT_USGOVT_RIGHTS2)) {
6176  MEDINTEREST(lDebug ? "US-Govt(2)" : "Govt-rights");
6177  }
6179  /*
6180  * AACA (Ada Conformity Assessment Authority)
6181  */
6182  if (INFILE(_LT_ACAA_RIGHTS) && INFILE(_LT_PUBLIC)) {
6183  INTERESTING("ACAA");
6184  }
6186  /*
6187  * Zend Engine License
6188  */
6189  if (INFILE(_LT_ZEND_1) || URL_INFILE(_URL_ZEND)) {
6190  INTERESTING("Zend-2.0");
6191  }
6192  else if (INFILE(_LT_ZEND_2)) {
6193  INTERESTING("Zend-1.0");
6194  }
6196  /*
6197  * WebM
6198  * Changed to BSD-3-Clause, WebM is not OSI nor SPDX recognized license
6199  */
6200  if (URL_INFILE(_URL_WEBM)) {
6201  INTERESTING(lDebug ? "WebM" : "BSD-3-Clause");
6202  }
6204  /* Dyade Public License
6205  * http://old.koalateam.com/jackaroo/DYADE_PUBLIC_LICENSE.TXT
6206  */
6207  if (INFILE(_LT_DYADE) && INFILE(_LT_DYADE_2))
6208  {
6209  INTERESTING("Dyade");
6210  }
6211  /*
6212  * Zimbra
6213  */
6214  if (INFILE(_TITLE_ZIMBRA_13)) {
6215  INTERESTING("Zimbra-1.3");
6216  }
6217  else if (INFILE(_TITLE_ZIMBRA_12)) {
6218  INTERESTING("Zimbra-1.2");
6219  }
6220  else if (INFILE(_TITLE_ZIMBRA)) {
6221  INTERESTING("Zimbra");
6222  }
6224  /*
6225  * Open Database
6226  */
6227  if (INFILE(_TITLE_ODBL)) {
6228  INTERESTING("ODbL-1.0");
6229  lmem[_fODBL] = 1;
6230  }
6232  /*
6233  * Multics
6234  */
6235  if (INFILE(_LT_MULTICS)) {
6236  INTERESTING("Multics");
6237  }
6239  /*
6240  * H2
6241  * Note, H2 title is also checked in MPL section
6242  */
6243  if (INFILE(_TITLE_H2_V10)) {
6244  INTERESTING("H2-1.0");
6245  }
6247  /*
6248  * CRYPTOGAMS
6249  */
6250  if (INFILE(_LT_CRYPTOGAMS)) {
6251  INTERESTING("Cryptogams");
6252  }
6254  /*
6255  * Cygnus-eCos-1.0
6256  * Note, Cygnus-eCos title is also checked in MPL section
6257  */
6258  if (INFILE(_TITLE_CYGNUS_ECOS_V10)) {
6259  INTERESTING("Cygnus-eCos-1.0");
6260  }
6262  /*
6263  * RHeCos-1.1
6264  * Note, RHeCos-1.1 title is also checked in MPL section
6265  */
6266  if (INFILE(_TITLE_RHeCos_V11)) {
6267  INTERESTING("RHeCos-1.1");
6268  }
6270  /*
6271  * TMate
6272  * Note, TMate is also recognized with BSD-2-Clause detection
6273  */
6274  if (INFILE(_TITLE_TMATE)) {
6275  INTERESTING("TMate");
6276  }
6278  /*
6279  * Abstyles
6280  */
6281  if (INFILE(_LT_ABSTYLES_1) && INFILE(_LT_ABSTYLES_2)) {
6282  INTERESTING("Abstyles");
6283  }
6285  /*
6286  * Amazon Digital Services License
6287  */
6288  if (INFILE(_LT_ADSL) && INFILE(_CR_AMAZON)) {
6289  INTERESTING("ADSL");
6290  }
6292  /*
6293  * CrystalStacker License
6294  */
6295  if (HASTEXT(_LT_CRYSTALSTACKER, REG_EXTENDED)) {
6296  INTERESTING("CrystalStacker");
6297  }
6299  /*
6300  * 3GPP
6301  */
6302  if (INFILE(_LT_3GPP)) {
6303  INTERESTING("3GPP");
6304  }
6306  /*
6307  * ITU-T
6308  */
6309  if (INFILE(_LT_ITU_T_1) || INFILE(_LT_ITU_T_2) || HASTEXT(_TITLE_ITU_T, 0)) {
6310  INTERESTING("ITU-T");
6311  }
6313  /*
6314  * Sun Public License
6315  */
6316  if (!lmem[_mSUN] && !lmem[_mMPL]) {
6317  if (INFILE(_TITLE_SUN_PL10)) {
6318  INTERESTING("SPL-1.0");
6319  }
6320  else if (!lmem[_fREAL] && INFILE(_TITLE_SUN_PL)) {
6321  INTERESTING("SPL");
6322  }
6323  }
6325  /*
6326  * libtiff, note that license text is detected earlier
6327  */
6328  if (INFILE(_PHR_LIBTIFF)) {
6329  INTERESTING("libtiff");
6330  }
6332  /*
6333  * Imlib2
6334  */
6335  if (INFILE(_PHR_Imlib2)) {
6336  INTERESTING("Imlib2");
6337  }
6339  /*
6340  * Wide Open License (WOL)
6341  */
6342  if (INFILE(_TITLE_WOL) || INFILE(_URL_WOL)) {
6343  INTERESTING("WOL");
6344  }
6346  /*
6347  * naist-2003
6348  */
6349  if (INFILE(_LT_NAIST_2003) && HASTEXT(_TEXT_NAIST, 0)) {
6350  INTERESTING("naist-2003");
6351  }
6353  /*
6354  * EDL-1.0
6355  */
6356  if (INFILE(_TITLE_EDL_V10)) {
6357  INTERESTING("EDL-1.0");
6358  }
6360  /*
6361  * HSQLDB
6362  */
6363  if (INFILE(_LT_HSQLDB_1) || INFILE(_LT_HSQLDB_2) || INFILE(_LT_HSQLDB_3)) {
6364  INTERESTING("HSQLDB");
6365  }
6367  /*
6368  * Sony Computer Entertainment (SCEA) Shared Source License
6369  */
6370  if (INFILE(_TITLE_SCEA)) {
6371  INTERESTING("SCEA");
6372  }
6374  /*
6375  * OpenMap
6376  */
6377  if (INFILE(_TITLE_OPENMAP)) {
6378  INTERESTING("OpenMap");
6379  lmem[_fPDDL] = 1;
6380  }
6382  /*
6383  * ICU 1.8.1
6384  */
6385  if (INFILE(_LT_ICU_1) || INFILE(_TITLE_ICU) || INFILE(_SPDX_ICU)) {
6386  INTERESTING("ICU");
6387  }
6388  else if (INFILE(_PHR_ICU_1)) {
6389  INTERESTING("ICU");
6390  }
6392  /*
6393  * Ubuntu Font License
6394  */
6395  if (INFILE(_TITLE_UBUNTU_FONT)) {
6396  INTERESTING("ubuntu-font-1.0");
6397  lmem[_fPDDL] = 1;
6398  }
6400  /*
6401  * ODC Attribution License
6402  */
6403  if (INFILE(_LT_ODC)) {
6404  INTERESTING("ODC-By-1.0");
6405  pd = 0;
6406  }
6408  /*
6409  * Community Data License Agreement
6410  */
6411  if (INFILE(_TITLE_CDLA_Permissive_10)) {
6412  INTERESTING("CDLA-Permissive-1.0");
6413  }
6414  else if (INFILE(_TITLE_CDLA_Sharing_10)) {
6415  INTERESTING("CDLA-Sharing-1.0");
6416  }
6418  /*
6419  * Toolbar2000
6420  */
6421  if (INFILE(_TITLE_Toolbar2000) || INFILE(_URL_Toolbar2000)) {
6422  INTERESTING("Toolbar2000");
6423  }
6425  /*
6426  * unboundID-ldap-sdk
6427  */
6428  if (INFILE(_TITLE_unboundID_ldap_sdk) || INFILE(_LT_unboundID_ldap_sdk)) {
6429  INTERESTING("unboundID-ldap-sdk");
6430  }
6432  /*
6433  * BlueOak-1.0.0
6434  */
6435  if (INFILE(_TITLE_BlueOak_100) || URL_INFILE(_URL_BlueOak_100)) {
6436  INTERESTING("BlueOak-1.0.0");
6437  }
6438  else if (INFILE(_LT_BlueOak_100_Purpose) && INFILE(_LT_BlueOak_100_Acceptance)) {
6439  INTERESTING("BlueOak-1.0.0");
6440  }
6442  /*
6443  * CERN-OHL
6444  */
6445  if (INFILE(_TITLE_CERN_OHL_11)) {
6446  INTERESTING("CERN-OHL-1.1");
6447  }
6448  else if (INFILE(_TITLE_CERN_OHL_12)) {
6449  INTERESTING("CERN-OHL-1.2");
6450  }
6452  /*
6453  * MulanPSL
6454  */
6455  if (INFILE(_TITLE_MulanPSL_10) || URL_INFILE(_URL_MulanPSL) || INFILE(_LT_MulanPSL_10)) {
6456  INTERESTING("MulanPSL-1.0");
6457  }
6459  /*
6460  * SSH
6461  */
6462  if (INFILE(_LT_FREE_72) && HASTEXT(_LT_SSH, REG_EXTENDED)) {
6463  if (INFILE(_LT_SSH_OpenSSH)) {
6464  INTERESTING("SSH-OpenSSH");
6465  }
6466  else {
6467  INTERESTING("SSH-short");
6468  }
6469  }
6471 
6472  SPDXREF();
6474  EXCEPTIONS();
6476 
6477  /*
6478  * The Stallman paper "Why Software Should Be Free" is a red-herring.
6479  * His 1986 interview in Byte magazine also is, too.
6480  */
6481  if ((INFILE(_TITLE_RMS_WSSBF) && INFILE(_PHR_RMS1) &&
6482  INFILE(_PHR_RMS2)) || INFILE(_TITLE_RMS_BYTE86)) {
6483  if (lDiags) {
6484  printf("... RMS propaganda\n");
6485  }
6486  lmem[_fDOC] = 1;
6487  }
6489  /*
6490  * If there's a no-warranty statement in the file, remember the regex.
6491  * Ditto for phrase stating restrictions.
6492  */
6493  if (maxInterest != IL_HIGH) {
6494  for (i = 0; i < NNOWARRANTY; i++) {
6495  if (INFILE((j = _NO_WARRANTY_first+i))) {
6496  nw = j;
6497  break;
6498  }
6499  }
6500  }
6501  addLicence(cur.theMatches,"NoWarranty");
6502 
6503  /*
6504  * Statements about IP (Intellectual Property) rights
6505  */
6506  if (!lmem[_fIP] && INFILE(_LT_GEN_IP_1)) {
6507  INTERESTING(lDebug ? "IP(1)" : "IP-claim");
6508  }
6509  else if (!lmem[_fIP] && INFILE(_LT_GEN_IP_2) && NOT_INFILE(_TITLE_MIROS)) {
6510  INTERESTING(lDebug ? "IP(2)" : "IP-claim");
6511  }
6512  else if (!lmem[_fIP] && INFILE(_LT_GEN_IP_3)) {
6513  INTERESTING(lDebug ? "IP(3)" : "IP-claim");
6514  }
6516  /*
6517  * Dual licenses
6518  */
6519  if (INFILE(_LT_DUAL_LICENSE_0) && NOT_INFILE(_TITLE_NOSL)) {
6520  MEDINTEREST(lDebug ? "Dual-license(0)" : "Dual-license");
6521  }
6522  else if (INFILE(_LT_DUAL_LICENSE_22)) {
6523  MEDINTEREST(lDebug ? "Dual-license(22)" : "Dual-license");
6524  }
6525  else if (INFILE(_LT_DUAL_LICENSE_1) && NOT_INFILE(_TITLE_NOSL)) {
6526  MEDINTEREST(lDebug ? "Dual-license(1)" : "Dual-license");
6527  }
6528  else if (INFILE(_LT_DUAL_LICENSE_2)) {
6529  MEDINTEREST(lDebug ? "Dual-license(2)" : "Dual-license");
6530  }
6531  else if (INFILE(_LT_DUAL_LICENSE_3) && NOT_INFILE(_LT_DUAL_LICENSE_3_EXHIBIT)) {
6532  MEDINTEREST(lDebug ? "Dual-license(3)" : "Dual-license");
6533  }
6534  else if (INFILE(_LT_DUAL_LICENSE_4)) {
6535  MEDINTEREST(lDebug ? "Dual-license(4)" : "Dual-license");
6536  }
6537  else if (INFILE(_LT_DUAL_LICENSE_5)) {
6538  MEDINTEREST(lDebug ? "Dual-license(5)" : "Dual-license");
6539  }
6540  else if (INFILE(_LT_DUAL_LICENSE_6)) {
6541  MEDINTEREST(lDebug ? "Dual-license(6)" : "Dual-license");
6542  }
6543  else if (INFILE(_LT_DUAL_LICENSE_7)) {
6544  MEDINTEREST(lDebug ? "Dual-license(7)" : "Dual-license");
6545  }
6546  else if (INFILE(_LT_DUAL_LICENSE_8)) {
6547  MEDINTEREST(lDebug ? "Dual-license(8)" : "Dual-license");
6548  }
6549  else if (INFILE(_LT_DUAL_LICENSE_9)) {
6550  MEDINTEREST(lDebug ? "Dual-license(9)" : "Dual-license");
6551  }
6552  else if (INFILE(_LT_DUAL_LICENSE_10)) {
6553  MEDINTEREST(lDebug ? "Dual-license(10)" : "Dual-license");
6554  }
6555  else if (INFILE(_LT_DUAL_LICENSE_11)) {
6556  MEDINTEREST(lDebug ? "Dual-license(11)" : "Dual-license");
6557  }
6558  else if (INFILE(_LT_DUAL_LICENSE_12)) {
6559  MEDINTEREST(lDebug ? "Dual-license(12)" : "Dual-license");
6560  }
6561  else if (INFILE(_LT_DUAL_LICENSE_13)) {
6562  INTERESTING(lDebug ? "Dual-license(13)" : "Dual-license");
6563  INTERESTING("BSD");
6564  INTERESTING("MIT");
6565  /*
6566  * A special case for NomosTestfiles/Dual-license/respond.js
6567  * that has two dual-license statements.
6568  */
6569  if (!lmem[_mGPL]) {
6570  if (INFILE(_LT_DUAL_LICENSE_16)) {
6571  INTERESTING(lDebug ? "GPLV2(Dual-license(16))" : "GPL-2.0-only");
6572  }
6573  }
6574  }
6575  else if (INFILE(_LT_DUAL_LICENSE_14)) {
6576  INTERESTING(lDebug ? "Dual-license(14)" : "Dual-license");
6577  INTERESTING("BSD");
6578  if (!lmem[_mGPL]) {
6579  INTERESTING("GPL");
6580  }
6581  }
6582  else if (INFILE(_LT_DUAL_LICENSE_15)) {
6583  MEDINTEREST(lDebug ? "Dual-license(15)" : "Dual-license");
6584  }
6585  else if (INFILE(_LT_DUAL_LICENSE_16)) {
6586  INTERESTING(lDebug ? "Dual-license(16)" : "Dual-license");
6587  INTERESTING("MIT");
6588  INTERESTING(lDebug ? "GPLV2(Dual-license(16))" : "GPL-2.0-only");
6589  }
6590  else if (INFILE(_LT_DUAL_LICENSE_17)) {
6591  MEDINTEREST(lDebug ? "Dual-license(17)" : "Dual-license");
6592  }
6593  else if (INFILE(_LT_DUAL_LICENSE_18)) {
6594  MEDINTEREST(lDebug ? "Dual-license(18)" : "Dual-license");
6595  }
6596  else if (INFILE(_LT_DUAL_LICENSE_19)) {
6597  MEDINTEREST(lDebug ? "Dual-license(19)" : "Dual-license");
6598  }
6599  else if (INFILE(_LT_DUAL_LICENSE_20)) {
6600  MEDINTEREST(lDebug ? "Dual-license(20)" : "Dual-license");
6601  }
6602  else if (INFILE(_LT_DUAL_LICENSE_21)) {
6603  MEDINTEREST(lDebug ? "Dual-license(21)" : "Dual-license");
6604  }
6605  else if (INFILE(_LT_DUAL_LICENSE_23)) {
6606  MEDINTEREST(lDebug ? "Dual-license(23)" : "Dual-license");
6607  }
6608  else if (INFILE(_LT_DUAL_LICENSE_24)) {
6609  MEDINTEREST(lDebug ? "Dual-license(24)" : "Dual-license");
6610  }
6611  else if (INFILE(_LT_DUAL_LICENSE_25)) {
6612  MEDINTEREST(lDebug ? "Dual-license(25)" : "Dual-license");
6613  }
6614  else if (INFILE(_LT_DUAL_LICENSE_26)) {
6615  MEDINTEREST(lDebug ? "Dual-license(26)" : "Dual-license");
6616  }
6617  else if (INFILE(_LT_DUAL_LICENSE_27)) {
6618  MEDINTEREST(lDebug ? "Dual-license(27)" : "Dual-license");
6619  }
6620  else if (INFILE(_LT_DUAL_LICENSE_28)) {
6621  MEDINTEREST(lDebug ? "Dual-license(28)" : "Dual-license");
6622  }
6623  else if (INFILE(_LT_DUAL_LICENSE_29) && NOT_INFILE(_LT_MPL_SECONDARY_LICENSE)) {
6624  MEDINTEREST(lDebug ? "Dual-license(29)" : "Dual-license");
6625  }
6626  else if (INFILE(_LT_DUAL_LICENSE_30)) {
6627  MEDINTEREST(lDebug ? "Dual-license(30)" : "Dual-license");
6628  }
6629  else if (INFILE(_LT_DUAL_LICENSE_31)) {
6630  MEDINTEREST(lDebug ? "Dual-license(31)" : "Dual-license");
6631  }
6632  else if (INFILE(_LT_DUAL_LICENSE_32)) {
6633  MEDINTEREST(lDebug ? "Dual-license(32)" : "Dual-license");
6634  }
6635  else if (INFILE(_LT_DUAL_LICENSE_33)) {
6636  MEDINTEREST(lDebug ? "Dual-license(33)" : "Dual-license");
6637  }
6638  else if (INFILE(_LT_DUAL_LICENSE_34)) {
6639  MEDINTEREST(lDebug ? "Dual-license(34)" : "Dual-license");
6640  }
6641  else if (HASTEXT(_LT_DUAL_LICENSE_35, 0)) {
6642  MEDINTEREST(lDebug ? "Dual-license(35)" : "Dual-license");
6643  /*
6644  * GPL is not detected correctly in this case, therefore it is set here.
6645  */
6646  INTERESTING("GPL");
6647  }
6648  else if (INFILE(_LT_DUAL_LICENSE_36)) {
6649  MEDINTEREST(lDebug ? "Dual-license(36)" : "Dual-license");
6650  }
6651  else if (INFILE(_LT_DUAL_LICENSE_37)) {
6652  MEDINTEREST(lDebug ? "Dual-license(37)" : "Dual-license");
6653  }
6654  else if (INFILE(_LT_DUAL_LICENSE_38)) {
6655  MEDINTEREST(lDebug ? "Dual-license(38)" : "Dual-license");
6656  }
6657  else if (INFILE(_LT_DUAL_LICENSE_39)) {
6658  MEDINTEREST(lDebug ? "Dual-license(39)" : "Dual-license");
6659  }
6660  else if (INFILE(_LT_DUAL_LICENSE_40)) {
6661  MEDINTEREST(lDebug ? "Dual-license(40)" : "Dual-license");
6662  }
6663  else if (INFILE(_LT_DUAL_LICENSE_41)) {
6664  MEDINTEREST(lDebug ? "Dual-license(41)" : "Dual-license");
6665  }
6666  else if (INFILE(_LT_DUAL_LICENSE_42)) {
6667  MEDINTEREST(lDebug ? "Dual-license(42)" : "Dual-license");
6668  }
6669  else if (INFILE(_LT_DUAL_LICENSE_43)) {
6670  MEDINTEREST(lDebug ? "Dual-license(43)" : "Dual-license");
6671  }
6672  else if (HASTEXT(_LT_DUAL_LICENSE_44, 0)) {
6673  MEDINTEREST(lDebug ? "Dual-license(44)" : "Dual-license");
6674  }
6675  else if (INFILE(_LT_DUAL_LICENSE_45)) {
6676  MEDINTEREST(lDebug ? "Dual-license(45)" : "Dual-license");
6677  INTERESTING("MIT");
6678  }
6679  else if (HASTEXT(_LT_DUAL_LICENSE_46, REG_EXTENDED)) {
6680  MEDINTEREST(lDebug ? "Dual-license(46)" : "Dual-license");
6681  }
6682  else if (HASTEXT(_LT_DUAL_LICENSE_47, REG_EXTENDED) && NOT_INFILE(_LT_MPL_SECONDARY_LICENSE)) {
6683  MEDINTEREST(lDebug ? "Dual-license(47)" : "Dual-license");
6684  }
6685  else if (INFILE(_LT_DUAL_LICENSE_48)) {
6686  MEDINTEREST(lDebug ? "Dual-license(48)" : "Dual-license");
6687  }
6688  else if (HASTEXT(_LT_DUAL_LICENSE_49, REG_EXTENDED)) {
6689  MEDINTEREST(lDebug ? "Dual-license(49)" : "Dual-license");
6690  }
6692  /*
6693  * The Beer-ware license(!)
6694  */
6695  if (INFILE(_LT_BEERWARE)) {
6696  INTERESTING("Beerware");
6697  }
6699  /*
6700  * CMake license
6701  */
6702  if (URL_INFILE(_URL_CMAKE)) {
6703  INTERESTING("CMake");
6704  }
6706  /*
6707  * unRAR restriction
6708  */
6709  if (INFILE(_LT_UNRARref1) || INFILE(_LT_UNRARref2)) {
6710  INTERESTING("unRAR restriction");
6711  }
6713  /*
6714  * ANTLR Software Rights Notice
6715  */
6716  if (INFILE(_LT_ANTLR)) {
6717  INTERESTING("ANTLR-PD");
6718  lmem[_fANTLR] = 1;
6719  }
6721  /*
6722  * Creative Commons Zero v1.0 Universal
6723  */
6724  if (INFILE(_SPDX_CC0_10)) {
6725  INTERESTING("CC0-1.0");
6726  }
6727  else if (INFILE(_TITLE_CC0_10_1) || INFILE(_PHR_CC0_1) || INFILE(_PHR_CC0_2)) {
6728  INTERESTING("CC0-1.0");
6729  }
6730  else if (INFILE(_SPDX_CC0)) {
6731  INTERESTING("CC0");
6732  }
6734  /*
6735  * PA Font License (IPA)
6736  */
6737  if (INFILE(_TITLE_IPA)) {
6738  INTERESTING("IPA");
6739  }
6741  /*
6742  * European Union Public Licence
6743  */
6744  if (INFILE(_PHR_EUPL_10) || INFILE(_TITLE_EUPL_10)) {
6745  INTERESTING("EUPL-1.0");
6746  }
6747  else if (INFILE(_PHR_EUPL_11) || INFILE(_TITLE_EUPL_11)) {
6748  INTERESTING("EUPL-1.1");
6749  }
6750  else if (INFILE(_TITLE_EUPL_12)) {
6751  INTERESTING("EUPL-1.2");
6752  }
6753  else if (INFILE(_PHR_EUPL)) {
6754  INTERESTING("EUPL");
6755  }
6757  /* University of Illinois/NCSA Open Source License */
6758  if (!lmem[_fNCSA] && INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_NCSA_EXHIBIT)) {
6759  INTERESTING(lDebug ? "NCSA(2)" : "NCSA");
6760  /* OZPLB-1.1 refers both to NCSA and OZPLB-1.1 licenses */
6761  if (INFILE(_TITLE_OZPLB_11)) {
6762  INTERESTING("OZPLB-1.1");
6763  }
6764  lmem[_fBSD] = 1;
6765  lmem[_mMIT] = 1;
6766  }
6768  /* ODC Public Domain Dedication & License 1.0 */
6769  if (INFILE(_TITLE_PDDL)) {
6770  INTERESTING("PDDL-1.0");
6771  lmem[_fPDDL] = 1;
6772  }
6774  /* PostgreSQL License */
6775  if (INFILE(_TITLE_POSTGRES) || INFILE(_TITLE_POSTGRES_1)) {
6776  INTERESTING("PostgreSQL");
6777  lmem[_fBSD] = 1;
6778  }
6780  /* Sax Public Domain Notice */
6781  if (INFILE(_LT_SAX_PD)) {
6782  INTERESTING("SAX-PD");
6783  lmem[_fSAX] = 1;
6784  }
6786  /*
6787  * WTF Public "license"
6788  */
6789  if (INFILE(_LT_WTFPL)) {
6790  INTERESTING("WTFPL");
6791  }
6792  else if (INFILE(_LT_WTFPLref)) {
6793  INTERESTING(lDebug ? "WTFPL(ref)" : "WTFPL");
6794  }
6795  else if (INFILE(_LT_WTFPLref_1)) {
6796  INTERESTING(lDebug ? "WTFPL(ref#1)" : "WTFPL");
6797  }
6798  else if (INFILE(_PHR_WTFPL)) {
6799  INTERESTING(lDebug ? "WTFPL(phr)" : "WTFPL");
6800  }
6802  /* Independent JPEG Group License */
6803  if (!lmem[_fIJG]) {
6804  if (HASTEXT(_PHR_IJG_1, REG_EXTENDED)) {
6805  INTERESTING("IJG");
6806  }
6807  else if (HASTEXT(_PHR_IJG_2, 0)) {
6808  INTERESTING("IJG");
6809  }
6810  else if (HASTEXT(_TITLE_IJG_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_2, 0)) {
6811  INTERESTING("IJG");
6812  }
6813  /* Independent JPEG Group can be referenced without IJG license*/
6814  else if (HASTEXT(_TITLE_IJG_2, 0) && !HASTEXT(_PHR_IJG_INTERFACE_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_2, 0)) {
6815  INTERESTING("IJG-possibility");
6816  }
6818  }
6819  /* Netizen Open Source License */
6820  if (!lmem[_mMPL] && INFILE(_TITLE_NOSL)) {
6821  INTERESTING(lDebug ? "NOSL(#2)" : "NOSL");
6822  }
6824  /* Net Boolean Public License v1 */
6825  if (INFILE(_TITLE_NBPL_V10)) {
6826  INTERESTING("NBPL-1.0");
6827  }
6829  /* Flora License */
6830  if (INFILE(_TITLE_Flora_V10)) {
6831  INTERESTING("Flora-1.0");
6832  }
6833  else if (INFILE(_TITLE_Flora_V11)) {
6834  INTERESTING("Flora-1.1");
6835  }
6836  else if (URL_INFILE(_URL_Flora)) {
6837  INTERESTING("Flora");
6838  }
6840  /* Standard ML of New Jersey License */
6841  if (INFILE(_TITLE_SMLNJ)) {
6842  INTERESTING("SMLNJ");
6843  }
6845  /* Mozilla Public License possibility */
6846  if (!lmem[_mMPL]) {
6847  if (INFILE(_TEXT_MPLV2) && INFILE(_URL_MPL20)) {
6848  INTERESTING("MPL-2.0");
6849  lmem[_mMPL] = 1;
6850  }
6851  else if (INFILE(_TEXT_MPL20_UNDER)) {
6852  INTERESTING("MPL-2.0");
6853  lmem[_mMPL] = 1;
6854  }
6855  else if (URL_INFILE(_URL_MPL_LATEST)) {
6856  INTERESTING(lDebug ? "MPL(latest)" : "MPL");
6857  lmem[_mMPL] = 1;
6858  }
6859  }
6861  /* Citrix License */
6862  if (INFILE(_TITLE_CITRIX)) {
6863  INTERESTING("Citrix");
6864  lmem[_fCITRIX] = 1;
6865  }
6867  /* CUA office public license */
6868  if (INFILE(_TITLE_CUA10)) {
6869  INTERESTING("CUA-OPL-1.0");
6870  }
6872  /* the Erlang Public License */
6873  if (INFILE(_TITLE_ERLPL_ref)) {
6874  INTERESTING("ErlPL-1.1");
6875  }
6877  /* German Free Software License */
6878  if (INFILE(_TITLE_D_FSL_10) || INFILE(_TITLE_D_FSL_DE1_10) || INFILE(_TITLE_D_FSL_DE2_10) || INFILE(_TITLE_D_FSL_DE3_10) || INFILE(_TITLE_D_FSL_DE4_10))
6879  {
6880  INTERESTING("D-FSL-1.0");
6881  lmem[_mGPL] = 1;
6882  }
6884  /* CCLRC License */
6885  if (INFILE(_TITLE_CCLRC)) {
6886  INTERESTING("CCLRC");
6887  }
6889 
6890  /* Some GPL cases are still missing */
6891  if (!lmem[_mGPL] && (INFILE(_LT_GPL_V2_ref) || INFILE(_LT_GPL_V2_ref1) || INFILE(_LT_GPL_V2_ref2) || INFILE(_LT_GPL_V2_ref3) || INFILE(_LT_GPL_V2_ref4)))
6892  {
6893  INTERESTING(lDebug ? "GPL_V2_ref" : "GPL-2.0-only");
6894  lmem[_mGPL] = 1;
6895  }
6896  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_ref))
6897  {
6898  INTERESTING(lDebug ? "GPL_V3_ref" : "GPL-3.0-only");
6899  lmem[_mGPL] = 1;
6900  }
6901  else if (!lmem[_mGPL] && INFILE(_LT_GPLref22))
6902  {
6903  INTERESTING(lDebug ? "GPLref22" : "GPL");
6904  lmem[_mGPL] = 1;
6905  }
6906  else if (!lmem[_mGPL] && NOT_INFILE(_LT_IGNORE_CLAUSE_2) && INFILE(_LT_GPLref21))
6907  {
6908  INTERESTING(lDebug ? "GPLref21" : "GPL");
6909  lmem[_mGPL] = 1;
6910  }
6912 
6913  /* MX4J License version 1.0 */
6914  if (INFILE(_LT_MX4J_V10))
6915  {
6916  INTERESTING("MX4J-1.0");
6917  }
6918  else if (INFILE(_LT_MX4J))
6919  {
6920  INTERESTING("MX4J");
6921  }
6923  /* postfix license */
6924  if (INFILE(_TITLE_POSTFIX))
6925  {
6926  INTERESTING("Postfix");
6927  }
6929  /* not public domain */
6930  if (HASTEXT(_LT_PUBDOM_NOTclaim, REG_EXTENDED)) {
6931  if (INFILE(_LT_PUBDOM_CC)) {
6932  INTERESTING(lDebug ? "Pubdom(CC)" : "CC-PDDC");
6933  pd = 1;
6934  }
6935  else {
6936  INTERESTING(LS_NOT_PD);
6937  pd = 0;
6938  }
6939  }
6941  /* LIBGCJ license */
6942  if (INFILE(_LT_LIBGCJ))
6943  {
6944  INTERESTING("LIBGCJ");
6945  }
6947  /* open cascade technology public license */
6948  if (INFILE(_TITLE_OPEN_CASCADE))
6949  {
6950  INTERESTING("OpenCASCADE-PL");
6951  }
6953  /* KnowledgeTree Public License */
6954  if (INFILE(_LT_KnowledgeTree_V11))
6955  {
6956  INTERESTING("KnowledgeTree-1.1");
6957  }
6959  /* Interbase Public License */
6960  if (INFILE(_LT_Interbase_V10))
6961  {
6962  INTERESTING("Interbase-1.0");
6963  }
6965  /* ClearSilver license */
6966  if (INFILE(_LT_ClearSilver))
6967  {
6968  INTERESTING("ClearSilver");
6969  }
6971  /* ACE, TAO, CIAO */
6972  if(INFILE(_LT_ACE)) {
6973  INTERESTING("ACE");
6974  }
6975  else if(INFILE(_LT_FACE)) {
6976  INTERESTING("FaCE");
6977  }
6979  /* JISP */
6980  if(INFILE(_LT_JISP)) {
6981  INTERESTING("JISP");
6982  }
6984  /* Qmail */
6985  if(INFILE(_LT_QMAIL)) {
6986  INTERESTING("Qmail");
6987  }
6989  /* Migemo */
6990  if(INFILE(_LT_MIGEMO)) {
6991  INTERESTING("Migemo");
6992  }
6994  /* Sendmail */
6995  if(INFILE(_LT_Sendmail_title) ) {
6996  INTERESTING("Sendmail");
6997  }
6999  /* Giftware */
7000  if(INFILE(_LT_GIFTWARE)) {
7001  INTERESTING("Giftware");
7002  }
7004  /* Logica opensource */
7005  if(INFILE(_LT_LOGICA)) {
7006  INTERESTING("Logica-OSL-1.0");
7007  }
7009  /* Unidex */
7010  if(INFILE(_LT_UNIDEX)) {
7011  INTERESTING("Unidex");
7012  }
7014  /* TCL License */
7015  if (!lmem[_fTCL]) {
7016  if (INFILE(_TITLE_TCL)) {
7017  INTERESTING("TCL");
7018  }
7019  else if (INFILE(_SPDX_TCL)) {
7020  INTERESTING("TCL");
7021  }
7022  else if (INFILE(_LT_TCL)) {
7023  INTERESTING("TCL");
7024  }
7025  }
7027  /* AndroidSDK-Commercial license */
7028  if (INFILE(_LT_GOOGLE_SDK)) {
7029  INTERESTING("AndroidSDK.Commercial");
7030  }
7032  /* Qhull license */
7033  if (INFILE(_PHR_Qhull)) {
7034  INTERESTING("Qhull");
7035  }
7037  /* OZPLB-1.0 license */
7038  if (INFILE(_PHR_OZPLB_10)) {
7039  INTERESTING("OZPLB-1.0");
7040  }
7042  /* Texas Instruments license */
7043  if (INFILE(_LT_TI_BASE)) {
7044  if (INFILE(_LT_TI_TSPA)) {
7045  INTERESTING("TI-TSPA");
7046  } else if (INFILE(_LT_TI_TFL)) {
7047  INTERESTING("TI-TFL");
7048  }
7049  }
7051 
7052  /*
7053  * Some licenses say "licensed under the same terms as FOO".
7054  */
7055  gl.flags |= FL_SAVEBASE; /* save match buffer (if any) */
7056  if (*licStr == NULL_CHAR) {
7057  i = 0;
7058  if (INFILE(_LT_SAME_LICENSE_1)) {
7059  INTERESTING(lDebug ? "Same-lic-1" : "Same-license-as");
7060  i = 1;
7061  } else if (INFILE(_LT_SAME_LICENSE_2)) {
7062  INTERESTING(lDebug ? "Same-lic-2" : "Same-license-as");
7063  i = 2;
7064  }
7065  if (i) {
7066  if (cur.licPara == NULL_STR) {
7067  saveLicenseParagraph(cur.matchBase, isML, isPS, NO);
7068  }
7069  }
7070  }
7072  gl.flags |= ~FL_SAVEBASE; /* turn off, regardless */
7073  /*
7074  * ... and, there are several generic claims that "you are free to use this
7075  * software".
7076  * We call these claims "Freeware", because you can use the software free of charge,
7077  * but some other copyright holder exclusive rights are not granted in some cases.
7078  */
7079  if (*licStr == NULL_CHAR || pd >= 0) {
7080  for (i = 0; i < NFREECLAIM; i++) {
7081  if (CANSKIP(i, _KW_permission, _FREE_first_perm,
7082  _FREE_last_perm)) {
7083  i = _FREE_last_perm;
7084  continue;
7085  }
7086  if (CANSKIP(i, _KW_distribut, _FREE_first_dist,
7087  _FREE_last_dist)) {
7088  i = _FREE_last_dist;
7089  continue;
7090  }
7091  if (INFILE(_FREECLAIM_first+i)) {
7092  (void) strcpy(name, "Freeware");
7093  if (lDebug) {
7094  (void) sprintf(name+8, "(%d)", i+1);
7095  }
7096  INTERESTING(name);
7097  break;
7098  }
7099  }
7100  }
7102  /* Check for Public Domain */
7103  if (!lmem[_fANTLR] && !lmem[_fCLA] && !lmem[_mPYTHON] && !lmem[_mGFDL] &&
7104  !lmem[_fODBL] && !lmem[_fPDDL] && !lmem[_fRUBY] && !lmem[_fSAX] && !lmem[_fAPL] && !lmem[_mAPACHE] && !lmem[_mAPACHE10] && !lmem[_mAPACHE11] &&
7105  !lmem[_fARTISTIC] && !lmem[_fCITRIX] && !lmem[_mLGPL] && !lmem[_fBSD]&& NOT_INFILE(_TITLE_D_FSL_10)
7106  && !INFILE(_LT_CPOL)) {
7107  pd = checkPublicDomain(filetext, size, score, kwbm, isML, isPS);
7108  }
7110  /*
7111  * Some licenses point you to files/URLs...
7112  */
7113  if (*licStr == NULL_CHAR) {
7114  checkFileReferences(filetext, size, score, kwbm, isML, isPS);
7115  }
7117  /*
7118  * And, If no other licenses are present but there's a reference to
7119  * something being non-commercial, better note it now.
7120  */
7121 #if 0
7122  if (*licStr == NULL_CHAR && !HASKW(kwbm, _KW_public_domain))
7123 #endif
7124  if (maxInterest != IL_HIGH && !HASKW(kwbm, _KW_public_domain) &&
7125  NOT_INFILE(_PHR_COMMERC_NONCOMM)) {
7126  if (INFILE(_LT_NONCOMMERCIAL_1)) {
7127  INTERESTING(lDebug ? "NonC(1)" : "Non-commercial");
7128  }
7129  else if (INFILE(_LT_ZZNON_COMMERC1)) {
7130  INTERESTING(lDebug ? "NonC(2)" : "Non-commercial");
7131  }
7132  else if (INFILE(_LT_ZZNON_COMMERC2)) {
7133  INTERESTING(lDebug ? "NonC(3)" : "Non-commercial");
7134  }
7135  else if (HASTEXT(_TEXT_COMMERC, 0) &&
7136  INFILE(_PHR_NONCOMMERCIAL)) {
7137  INTERESTING(lDebug ? "NonC(4)" : "Non-commercial");
7138  }
7139  }
7140  if (INFILE(_LT_NOT_OPENSOURCE)) {
7141  INTERESTING("Not-OpenSource");
7142  }
7143  listClear(&whereList, NO); /* again, clear "unused" matches */
7145  /*
7146  * Look for footprints that declare something as proprietary... if we such
7147  * a statement, we care about the Copyright owner, too.
7148  */
7149  if (maxInterest != IL_HIGH) { /* if (*licStr == NULL_CHAR) { */
7150  j = 0; /* just a flag */
7151  if (INFILE(_LT_GEN_PROPRIETARY_1)) {
7152  INTERESTING(lDebug ? "Prop(1)" : "COMMERCIAL");
7153  j++;
7154  }
7155  else if (INFILE(_LT_GEN_PROPRIETARY_2)) {
7156  INTERESTING(lDebug ? "Prop(2)" : "COMMERCIAL");
7157  j++;
7158  }
7159  else if (INFILE(_LT_GEN_PROPRIETARY_3)) {
7160  INTERESTING(lDebug ? "Prop(3)" : "COMMERCIAL");
7161  j++;
7162  }
7163  else if (INFILE(_LT_GEN_PROPRIETARY_4)) {
7164  INTERESTING(lDebug ? "Prop(4)" : "COMMERCIAL");
7165  j++;
7166  }
7167  else if (INFILE(_LT_GEN_PROPRIETARY_5)) {
7168  INTERESTING(lDebug ? "Prop(5)" : "COMMERCIAL");
7169  j++;
7170  }
7171  else if (INFILE(_LT_GEN_PROPRIETARY_6)) {
7172  INTERESTING(lDebug ? "Prop(6)" : "COMMERCIAL");
7173  j++;
7174  }
7175  else if (INFILE(_LT_GEN_PROPRIETARY_7)) {
7176  INTERESTING(lDebug ? "Prop(7)" : "COMMERCIAL");
7177  j++;
7178  }
7179  else if (INFILE(_LT_GEN_PROPRIETARY_8)) {
7180  INTERESTING(lDebug ? "Prop(8)" : "COMMERCIAL");
7181  j++;
7182  }
7183  if (j) {
7184  checkCornerCases(filetext, size, score, kwbm, isML,
7185  isPS, nw, YES);
7186  }
7187  }
7188  listClear(&whereList, NO); /* again, clear "unused" matches */
7190  /*
7191  * END of license-footprint checking of known patterns/strings
7192  ******
7193  * Plan-B: look for things attorneys generally believe aren't "overly
7194  * legally-binding" or "uninterestring from a license perspective':
7195  * ... notable references to commercial, non-commercial, not-for-profit,
7196  * not-an-open-source-license, etc.
7197  */
7198  if (maxInterest != IL_HIGH) {
7199  if (INFILE(_LT_COMMERCIAL_1)) {
7200  INTERESTING(lDebug ? "COMM(1)" : "COMMERCIAL");
7201  }
7202  else if (INFILE(_LT_COMMERCIAL_2)) {
7203  INTERESTING(lDebug ? "COMM(2)" : "COMMERCIAL");
7204  }
7205  else if (HASTEXT(_LT_COMMERCIAL_3, REG_EXTENDED)) {
7206  if (HASTEXT(_LT_COMMERCIAL_Intel, REG_EXTENDED)) {
7207  INTERESTING("Intel.Commercial");
7208  } else if (HASTEXT(_LT_COMMERCIAL_Broadcom, REG_EXTENDED)) {
7209  INTERESTING("Broadcom.Commercial");
7210  } else {
7211  INTERESTING(lDebug ? "COMM(3)" : "COMMERCIAL");
7212  }
7213  }
7214  else if (INFILE(_LT_COMMERCIAL_4)) {
7215  if (HASTEXT(_LT_COMMERCIAL_Android_Fraunhofer, 0)) {
7216  INTERESTING("AndroidFraunhofer.Commercial");
7217  } else {
7218  INTERESTING(lDebug ? "COMM(4)" : "COMMERCIAL");
7219  }
7220  }
7221  else if (HASTEXT(_TEXT_BOOK, 0) && INFILE(_LT_BOOKPURCHASE)) {
7222  INTERESTING(lDebug ? "PurchBook" : "COMMERCIAL");
7223  }
7224  else if (INFILE(_LT_COMMERCIAL_5)) {
7225  INTERESTING(lDebug ? "COMM(5)" : "COMMERCIAL");
7226  }
7227  else if (INFILE(_LT_COMMERCIAL_6)) {
7228  INTERESTING(lDebug ? "COMM(6)" : "COMMERCIAL");
7229  }
7230  else if (INFILE(_LT_COMMERCIAL_7)) {
7231  INTERESTING(lDebug ? "COMM(7)" : "COMMERCIAL");
7232  }
7233  if (INFILE(_LT_NONPROFIT_1)) {
7234  MEDINTEREST(lDebug ? "NonP(1)" : "Non-profit");
7235  }
7236  else if (!lmem[_mPYTH_TEXT] && HASTEXT(_TEXT_PROFIT, 0) &&
7237  INFILE(_PHR_NONPROFIT)) {
7238  if (!(lmem[_fIETF] + lmem[_fDOC])) {
7239  MEDINTEREST(lDebug ? "NonP(2)" : "Non-profit");
7240  }
7241  }
7242  if (INFILE(_PHR_NO_SALE)) {
7243  MEDINTEREST("Not-for-sale");
7244  }
7245  if (!lmem[_mALADDIN] && INFILE(_PHR_NOT_OPEN)) {
7246  MEDINTEREST("NOT-Open-Source");
7247  }
7248  if (HASKW(kwbm, _KW_patent) && INFILE(_PHR_PATENT) && NOT_INFILE(_PHR_PATENT_NOT)) {
7249  MEDINTEREST("Patent-ref");
7250  }
7251  if (INFILE(_PHR_RESTRICT_RIGHTS)) {
7252  if (INFILE(_PHR_USGOVT_RESTRICT)) {
7253  MEDINTEREST("Govt-restrict");
7254  }
7255  else {
7256  MEDINTEREST("Restricted-rights");
7257  }
7258  }
7259  if (INFILE(_LT_EXPORTS_USA)) {
7260  MEDINTEREST("US-Export-restrict");
7261  }
7262  if (pd < 0) {
7263  checkPublicDomain(filetext, size, score, kwbm, isML, isPS);
7264  }
7265  }
7266  listClear(&whereList, NO); /* again, clear "unused" matches */
7268  /*
7269  * These "minimal-reference possibilities" MUST adhere to a prescribed
7270  * format: the name to be used MUST be the first of several name to match:
7271  * "(NAME identifier|NAME license|license NAME)"
7272  *****
7273  * Furthermore, licenses should be ordered from the most-specific to the
7274  * least-specific; e.g., look for LGPL_v3 before looking for LGPL -- the
7275  * strGrep() calls below ensure reporting only more-specific license
7276  * versions if found. For instance, if you order LGPL *before* LGPL_v3
7277  * we'll get both LGPLv3 and LGPL, which is redundant AND looks stupid.
7278  */
7279  if (*licStr == NULL_CHAR && HASKW(kwbm, _KW_license)) {
7280  for (i = 0, j = _MINlicense_first; i < NMINlicense; i++, j++) {
7281  if (dbgIdxGrep(j, filetext, lDiags)) {
7282  cp = strchr(_REGEX(j), ' ');
7283  if (cp == NULL_STR) {
7284  Assert(NO, "Bad reference[1] %d", j);
7285  continue;
7286  }
7287  *cp = NULL_CHAR;
7288  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
7289  REG_ICASE)) {
7290  (void) sprintf(name, "%s-possibility",
7291  _REGEX(j)+1);
7292  LOWINTEREST(name);
7293  }
7294  *cp = ' ';
7295  }
7296  }
7297  }
7298  listClear(&whereList, NO); /* again, clear "unused" matches */
7300  if (*licStr == NULL_CHAR && HASTEXT(_TEXT_SOURCE, 0)) {
7301  for (i = 0, j = _MINsource_first; i < NMINsource; i++, j++) {
7302  if (dbgIdxGrep(j, filetext, lDiags)) {
7303  cp = strchr(_REGEX(j), ' ');
7304  if (cp == NULL_STR) {
7305  Assert(NO, "Bad reference[2] %d", j);
7306  continue;
7307  }
7308  *cp = NULL_CHAR;
7309  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
7310  REG_ICASE)) {
7311  (void) sprintf(name, "%s-possibility",
7312  _REGEX(j)+1);
7313  LOWINTEREST(name);
7314  }
7315  *cp = ' ';
7316  }
7317  }
7318  }
7319  listClear(&whereList, NO); /* again, clear "unused" matches */
7321  if (*licStr == NULL_CHAR && HASTEXT(_KW_copyright, 0)) {
7322  for (i = 0, j = _MINcpyrt_first; i < NMINcpyrt; i++, j++) {
7323  if (dbgIdxGrep(j, filetext, lDiags)) {
7324  cp = strchr(_REGEX(j), ' ');
7325  if (cp == NULL_STR) {
7326  Assert(NO, "Bad reference[2] %d", j);
7327  continue;
7328  }
7329  *cp = NULL_CHAR;
7330  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
7331  REG_ICASE)) {
7332  (void) sprintf(name, "%s-possibility",
7333  _REGEX(j)+1);
7334  LOWINTEREST(name);
7335  }
7336  *cp = ' ';
7337  }
7338  }
7339  }
7340  listClear(&whereList, NO); /* again, clear "unused" matches */
7342  /*
7343  * NOW look for unclassified licenses, if we haven't found anything yet.
7344  * And avoid checking .po files -- message catalogues are known to have
7345  * false-positives.
7346  *****
7347  * FIX-ME: if a file contains ONLY a "no warranty" description/clause, it
7348  * will (currently) get flagged as an UnclassifiedLicense (so the check
7349  * for no-warranty was moved ABOVE this check in case we can use that info)
7350  */
7351  if (maxInterest != IL_HIGH && !lmem[_fDOC]) {
7352  if (!pd &&
7353  checkUnclassified(filetext, size, scp->score, isML,
7354  isPS, nw)) {
7355  strcpy(name, LS_UNCL);
7356  if (isPS) {
7357  strcat(name, "(PS)");
7358  }
7359  MEDINTEREST(name);
7360  checkCornerCases(filetext, size, score, kwbm, isML, isPS, nw, YES);
7361  }
7362 #ifdef UNKNOWN_CHECK_DEBUG
7363  else {
7364  printf("... NOT an Unclassified license, NW %d PD %d\n",
7365  nw, pd);
7366  }
7367 #endif /* UNKNOWN_CHECK_DEBUG */
7368  }
7369  listClear(&whereList, NO); /* clear "unused" matches */
7371  /*
7372  * If we still haven't found anything, check for the really-low interest
7373  * items such as copyrights, and references to keywords (patent/trademark)
7374  */
7375  if (maxInterest != IL_HIGH && pd <= 0) {
7376  checkCornerCases(filetext, size, score, kwbm, isML, isPS,
7377  nw, NO);
7378  }
7379 #ifdef MEMSTATS
7380  printf("DEBUG: static lists in parseLicenses():\n");
7381  listDump(&searchList, -1);
7382  memStats("parseLicenses: pre-Free");
7383 #endif /* MEMSTATS */
7384  listClear(&searchList, NO);
7385 #ifdef MEMSTATS
7386  memStats("parseLicenses: EOP");
7387 #endif /* MEMSTATS */
7388 #ifdef LTSR_DEBUG
7389  showLTCache("LTSR-results AFTER:");
7390 #endif /* LTSR_DEBUG */
7391 #ifdef FLAG_NO_COPYRIGHT
7392  if (!SEEN(_CR_ZZZANY)) {
7393  (void) INFILE(_CR_ZZZANY);
7394  }
7395  if (!SEEN(_CR_ZZZWRONG_1)) {
7396  (void) INFILE(_CR_ZZZWRONG_1);
7397  }
7398  if (LVAL(_CR_ZZZANY)+LVAL(_CR_ZZZWRONG_1)+
7399  HASREGEX(_CR_ZZZWRONG_2, filetext) == 0) {
7400  gl.flags |= FL_NOCOPYRIGHT;
7401  }
7402 #endif /* FLAG_NO_COPYRIGHT */
7403  listClear(&whCacheList, NO);
7404  if (whereList.used) {
7405  listClear(&whereList, NO); /* may already be cleared! */
7406  }
7407  return(licStr+1); /* don't include the leading comma */
7408 }
7409 
7418 char *sisslVersion(char *filetext, int size, int isML, int isPS)
7419 {
7420  char *lstr = NULL_STR;
7421 
7422 #ifdef PROC_TRACE
7423  traceFunc("== sisslVersion()\n");
7424 #endif /* PROC_TRACE */
7425 
7426  if (INFILE(_TITLE_SISSL_V11)) {
7427  lstr = "SISSL-1.1";
7428  }
7429  else if (INFILE(_TITLE_SISSL_V12)) {
7430  lstr = "SISSL-1.2";
7431  } else {
7432  lstr = "SISSL";
7433  }
7434  return lstr;
7435 }
7436 
7445 char *aslVersion(char *filetext, int size, int isML, int isPS)
7446 {
7447  char *lstr = NULL_STR;
7448 
7449 #ifdef PROC_TRACE
7450  traceFunc("== aslVersion()\n");
7451 #endif /* PROC_TRACE */
7452 
7453  /*
7454  * Exclude first non-Apache licenses
7455  */
7456  if (INFILE(_TITLE_PHORUM) || INFILE(_CR_PHORUM)) {
7457  lstr = "Phorum";
7458  lmem[_mAPACHE] = 1;
7459  }
7460  else if (INFILE(_CR_IMAGEMAGICK)) {
7461  lstr = "ImageMagick(Apache)";
7462  lmem[_mAPACHE] = 1;
7463  }
7464  /*
7465  * Apache-2.0 cases
7466  */
7467  else if (INFILE(_SPDX_Apache_20)) {
7468  lstr = (lDebug ? "Apache-2.0(SPDX)" : "Apache-2.0");
7469  lmem[_mAPACHE] = 1;
7470  }
7471  else if (INFILE(_TITLE_Apache_20)) {
7472  lstr = (lDebug ? "Apache-2(f)" : "Apache-2.0");
7473  lmem[_mAPACHE] = 1;
7474  }
7475  else if (INFILE(_PHR_Apache_20_ref1) || INFILE(_PHR_Apache_20_ref2) || INFILE(_PHR_Apache_20_ref3))
7476  {
7477  lstr = (lDebug ? "PHR_Apache_20_ref(1-5)" : "Apache-2.0");
7478  lmem[_mAPACHE] = 1;
7479  }
7480  else if (URL_INFILE(_URL_Apache_20)) {
7481  lstr = (lDebug ? "Apache-2.0(u)" : "Apache-2.0");
7482  lmem[_mAPACHE] = 1;
7483  }
7484  else if (INFILE(_LT_Apache_20) && NOT_INFILE(_TITLE_Flora_V10) && NOT_INFILE(_TITLE_Flora_V11) && !URL_INFILE(_URL_Flora))
7485  {
7486  lstr = (lDebug ? "Apache(2.0#2)" : "Apache-2.0");
7487  lmem[_mAPACHE] = 1;
7488  }
7489  else if (INFILE(_PHR_Apache_20_ref4) || INFILE(_PHR_Apache_20_ref5) || INFILE(_PHR_Apache_20_ref6) || INFILE(_PHR_Apache_20_ref7)) {
7490  lstr = (lDebug ? "Apache(2.0#3)" : "Apache-2.0");
7491  lmem[_mAPACHE] = 1;
7492  }
7493  else if (INFILE(_TITLE_Apache_20)) {
7494  lstr = (lDebug ? "Apache(2.0#4)" : "Apache-2.0");
7495  lmem[_mAPACHE] = 1;
7496  }
7497  else if (URL_INFILE(_URL_Apache_20_1)) {
7498  lstr = (lDebug ? "Apache2(url#1)" : "Apache-2.0");
7499  lmem[_mAPACHE] = 1;
7500  }
7501  else if (URL_INFILE(_URL_Apache_20_2)) {
7502  lstr = (lDebug ? "Apache2(url#2)" : "Apache-2.0");
7503  lmem[_mAPACHE] = 1;
7504  }
7505  /*
7506  * Apache-1.1 cases
7507  */
7508  else if (INFILE(_SPDX_Apache_11)) {
7509  lstr = (lDebug ? "Apache-1.1(SPDX)" : "Apache-1.1");
7510  lmem[_mAPACHE11] = 1;
7511  }
7512  else if (INFILE(_TITLE_Apache_11)) {
7513  lstr = (lDebug ? "Apache-1.1(f)" : "Apache-1.1");
7514  lmem[_mAPACHE11] = 1;
7515  }
7516  else if (URL_INFILE(_URL_Apache_11)) {
7517  lstr = (lDebug ? "Apache-1.1(u)" : "Apache-1.1");
7518  lmem[_mAPACHE11] = 1;
7519  }
7520  else if (INFILE(_LT_Apache_11_CLAUSE_3) && INFILE(_LT_Apache_11_CLAUSE_4) && INFILE(_LT_Apache_11_CLAUSE_5)) {
7521  lstr = (lDebug ? "Apache-1.1(clauses)" : "Apache-1.1");
7522  lmem[_mAPACHE11] = 1;
7523  }
7524  else if (INFILE(_PHR_Apache_11_ref1)) {
7525  lstr = (lDebug ? "Apache(1.1#phr)" : "Apache-1.1");
7526  lmem[_mAPACHE11] = 1;
7527  }
7528  /*
7529  * Apache-1.0 cases
7530  */
7531  else if (INFILE(_SPDX_Apache_10)) {
7532  lstr = (lDebug ? "Apache-1.0(SPDX)" : "Apache-1.0");
7533  lmem[_mAPACHE10] = 1;
7534  }
7535  else if (INFILE(_PHR_Apache_ref2)) {
7536  lstr = (lDebug ? "Apache-1.0(f)" : "Apache-1.0");
7537  lmem[_mAPACHE10] = 1;
7538  }
7539  else if (INFILE(_LT_Apache_10_CLAUSE_4)) {
7540  lstr = (lDebug ? "Apache-1.0(g)" : "Apache-1.0");
7541  lmem[_mAPACHE10] = 1;
7542  }
7543  else if (URL_INFILE(_URL_Apache_10)) {
7544  lstr = (lDebug ? "Apache-1.0(u)" : "Apache-v1.0");
7545  lmem[_mAPACHE10] = 1;
7546  }
7547  /*
7548  * BSD-style cases
7549  */
7550  else if (INFILE(_LT_BSD_1)) {
7551  if (INFILE(_CR_APACHE) || INFILE(_TITLE_Apache)) {
7552  if (INFILE(_PHR_Apache_20_ref6)) {
7553  lstr = (lDebug ? "Apache-20_ref6" : "Apache-2.0");
7554  lmem[_mAPACHE] = 1;
7555  }
7556  else if (INFILE(_PHR_Apache_11_ref2)) {
7557  lstr = (lDebug ? "Apache(1.1#2)" : "Apache-1.1");
7558  lmem[_mAPACHE11] = 1;
7559  }
7560  else if ((INFILE(_PHR_Apache_ref2) || INFILE(_LT_Apache_10_CLAUSE_4))) {
7561  lstr = (lDebug ? "Apache(1.0#2)" : "Apache-1.0");
7562  lmem[_mAPACHE10] = 1;
7563  }
7564  else {
7565  lstr = (lDebug ? "Apache(title)" : "Apache");
7566  lmem[_mAPACHE] = 1;
7567  }
7568  }
7569  }
7570  /*
7571  * Apache without versions
7572  */
7573  else if (!lmem[_fREAL] && INFILE(_SPDX_Apache)) {
7574  lstr = (lDebug ? "Apache(SPDX)" : "Apache");
7575  lmem[_mAPACHE] = 1;
7576  }
7577  else if (INFILE(_PHR_Apache_ref1)) {
7578  INTERESTING(lDebug ? "Apache(ref#1)" : "Apache");
7579  lmem[_mAPACHE] = 1;
7580  }
7581  else if (INFILE(_PHR_Apache_ref4)) {
7582  lstr = (lDebug ? "Apache(ref#3)" : "Apache");
7583  lmem[_mAPACHE] = 1;
7584  }
7585  else if (INFILE(_PHR_Apache_ref3)) {
7586  lstr = (lDebug ? "Apache(ref#4)" : "Apache");
7587  lmem[_mAPACHE] = 1;
7588  }
7589  else if (URL_INFILE(_URL_Apache_1)) {
7590  lstr = (lDebug ? "Apache(url#1)" : "Apache");
7591  lmem[_mAPACHE] = 1;
7592  }
7593  else if (URL_INFILE(_URL_Apache_2)) {
7594  lstr = (lDebug ? "Apache(url#2)" : "Apache");
7595  lmem[_mAPACHE] = 1;
7596  }
7597  else if (INFILE(_PHR_Apache_ref6)) {
7598  lstr = (lDebug ? "Apache(ref#6)" : "Apache");
7599  lmem[_mAPACHE] = 1;
7600  }
7601  /*
7602  * _LT_Apache_1 and _2 cannot be identified in any Apache license
7603  * versions. They have been defined in very early nomos versions. They
7604  * are kept here, although, there are no special test cases for them.
7605  */
7606  else if (INFILE(_LT_Apache_1)) {
7607  lstr = (lDebug ? "Apache(1)" : "Apache");
7608  lmem[_mAPACHE] = 1;
7609  }
7610  else if (INFILE(_LT_Apache_2)) {
7611  lstr = (lDebug ? "Apache(2)" : "Apache");
7612  lmem[_mAPACHE] = 1;
7613  }
7614  else if (INFILE(_LT_APACHESTYLEref)) {
7615  lstr = ("Apache-style");
7616  lmem[_mAPACHE] = 1;
7617  }
7618  return lstr;
7619 }
7620 
7629 char *mplNplVersion(char *filetext, int size, int isML, int isPS)
7630 {
7631  char *lstr = NULL_STR;
7632 
7633 #ifdef PROC_TRACE
7634  traceFunc("== mplNplVersion()\n");
7635 #endif /* PROC_TRACE */
7636 
7637  if (INFILE(_TITLE_MPL11_OR_LATER)) {
7638  lstr = "MPL-1.1+";
7639  }
7640  else if (INFILE(_LT_MPL11_ref)) {
7641  lstr = "MPL-1.1";
7642  }
7643  else if (INFILE(_TITLE_NPL11_MPL)) {
7644  lstr = "NPL-1.1";
7645  }
7646  else if (INFILE(_TITLE_MPL11) && INFILE(_TITLE_MPL_style)) {
7647  lstr = "MPL-1.1-style";
7648  }
7649  else if (INFILE(_TITLE_SUGARCRM_PL)) {
7650  lstr = "SugarCRM-1.1.3";
7651  lmem[_mMPL] = 1;
7652  lmem[_fATTRIB] = 1;
7653  }
7654  else if (INFILE(_TITLE_MPL11) && !HASTEXT(_LT_NP_AME, REG_EXTENDED)) {
7655  lstr = "MPL-1.1";
7656  }
7657  else if (INFILE(_TITLE_MPL20_EXCEPTION)) {
7658  lstr = "MPL-2.0-no-copyleft-exception";
7659  }
7660  else if (INFILE(_TITLE_MPL20) || URL_INFILE(_URL_MPL20) || HASTEXT(_LT_MPL20_ref, REG_EXTENDED)) {
7661  lstr = "MPL-2.0";
7662  }
7663  else if (INFILE(_TITLE_MPL10) && INFILE(_TITLE_ERLPL)) {
7664  lstr = "ErlPL-1.1";
7665  }
7666  else if (INFILE(_TITLE_MPL10)) {
7667  lstr = "MPL-1.0";
7668  }
7669  else if (INFILE(_TITLE_MPL_EULA_30)) {
7670  lstr = "MPL-EULA-3.0";
7671  }
7672  else if (INFILE(_TITLE_MPL_EULA_20)) {
7673  lstr = "MPL-EULA-2.0";
7674  }
7675  else if (INFILE(_TITLE_MPL_EULA_11)) {
7676  lstr = "MPL-EULA-1.1";
7677  }
7678  else if (URL_INFILE(_URL_NPL10)) {
7679  lstr = (lDebug ? "NPL1.0(url)" : "NPL-1.0");
7680  }
7681  else if (URL_INFILE(_URL_NPL11)) {
7682  lstr = (lDebug ? "NPL1.1(url)" : "NPL-1.1");
7683  }
7684  else if (URL_INFILE(_URL_MPL10)) {
7685  lstr = (lDebug ? "MPL1.0(url)" : "MPL-1.0");
7686  }
7687  else if (URL_INFILE(_URL_MPL11)) {
7688  lstr = (lDebug ? "MPL1.1(url)" : "MPL-1.1");
7689  }
7690  else if (INFILE(_FILE_MPL10)) {
7691  lstr = (lDebug ? "MPL1.0(file)" : "MPL-1.0");
7692  }
7693  else if (INFILE(_FILE_MPL11)) {
7694  lstr = (lDebug ? "MPL1.1(file)" : "MPL-1.1");
7695  }
7696  else if (INFILE(_TITLE_NPL11_OR_LATER)) {
7697  lstr = "NPL-1.1+";
7698  }
7699  else if (INFILE(_TITLE_NPL11)) {
7700  lstr = "NPL-1.1";
7701  }
7702  else if (INFILE(_TITLE_NPL10)) {
7703  lstr = "NPL-1.0";
7704  }
7705  else if (URL_INFILE(_URL_NPL)) {
7706  lstr = (lDebug ? "NPL(url)" : "NPL");
7707  }
7708  else if (INFILE(_SPDX_MPL_10)) {
7709  lstr = "MPL-1.0";
7710  }
7711  else if (INFILE(_SPDX_MPL_11)) {
7712  lstr = "MPL-1.1";
7713  }
7714  else if (INFILE(_SPDX_MPL_20_no_copyleft_exception)) {
7715  lstr = "MPL-2.0-no-copyleft-exception";
7716  }
7717  else if (INFILE(_SPDX_MPL_20)) {
7718  lstr = "MPL-2.0";
7719  }
7720  else if (URL_INFILE(_URL_MPL_LATEST)) {
7721  lstr = (lDebug ? "MPL(latest)" : "MPL");
7722  }
7723  else if (URL_INFILE(_URL_MPL)) {
7724  lstr = (lDebug ? "MPL(url)" : "MPL");
7725  }
7726  else if (INFILE(_TITLE_NPL)) {
7727  lstr = "NPL";
7728  }
7729  else if (INFILE(_TITLE_MPL)) {
7730  lstr = "MPL";
7731  }
7732  else {
7733  lstr = (lDebug ? "MPL(last)" : "MPL");
7734  }
7735  return lstr;
7736 }
7737 
7746 char *realVersion(char *filetext, int size, int isML, int isPS, int ref)
7747 {
7748  char *lstr = NULL_STR;
7749 
7750 #ifdef PROC_TRACE
7751  traceFunc("== realVersion()\n");
7752 #endif /* PROC_TRACE */
7753 
7754  if (ref == _TITLE_RPSL) {
7755  if (INFILE(_TITLE_RPSL_V30)) {
7756  lstr = "RPSL-3.0";
7757  }
7758  else if (INFILE(_TITLE_RPSL_V20)) {
7759  lstr = "RPSL-2.0";
7760  }
7761  else if (INFILE(_TITLE_RPSL_V10)) {
7762  lstr = "RPSL-1.0";
7763  }
7764  else if (INFILE(_TITLE_RPSL)) {
7765  lstr = "RPSL";
7766  }
7767  }
7768  else if (ref == _TITLE_RCSL) {
7769  if (INFILE(_TITLE_RCSL_V30)) {
7770  lstr = "RCSL-3.0";
7771  }
7772  else if (INFILE(_TITLE_RCSL_V20)) {
7773  lstr = "RCSL-2.0";
7774  }
7775  else if (INFILE(_TITLE_RCSL_V10)) {
7776  lstr = "RCSL-1.0";
7777  }
7778  else if (INFILE(_TITLE_RCSL)) {
7779  lstr = "RCSL";
7780  }
7781  }
7782  else {
7783  lstr = "RealNetworks-Unknown";
7784  }
7785  return lstr;
7786 }
7787 
7796 char *pythonVersion(char *filetext, int size, int isML, int isPS)
7797 {
7798  char *lstr = NULL_STR;
7799 
7800 #ifdef PROC_TRACE
7801  traceFunc("== pythonVersion()\n");
7802 #endif /* PROC_TRACE */
7803 
7804  if (INFILE(_TITLE_PYTHON201)) {
7805  lstr = "Python-2.0.1";
7806  }
7807  else if (INFILE(_TITLE_PYTHON202)) {
7808  lstr = "Python-2.0.2";
7809  }
7810  else if (INFILE(_TITLE_PYTHON211)) {
7811  lstr = "Python-2.1.1";
7812  }
7813  else if (INFILE(_TITLE_PYTHON213)) {
7814  lstr = "Python-2.1.3";
7815  }
7816  else if (INFILE(_TITLE_PYTHON223)) {
7817  lstr = "Python-2.2.3";
7818  }
7819  else if (INFILE(_TITLE_PYTHON227)) {
7820  lstr = "Python-2.2.7";
7821  }
7822  else if (INFILE(_TITLE_PYTHON237)) {
7823  lstr = "Python-2.3.7";
7824  }
7825  else if (INFILE(_TITLE_PYTHON244)) {
7826  lstr = "Python-2.4.4";
7827  }
7828  else if (INFILE(_TITLE_PYTHON22)) {
7829  lstr = "Python-2.2";
7830  }
7831  else if (INFILE(_TITLE_PYTHON23)) {
7832  lstr = "Python-2.3";
7833  }
7834  else if (INFILE(_TITLE_PYTHON_20_1) || INFILE(_TITLE_PYTHON_20_2)) {
7835  lstr = "Python-2.0";
7836  }
7837  else {
7838  lstr = "Python";
7839  }
7840  return lstr;
7841 }
7842 
7851 char *aflVersion(char *filetext, int size, int isML, int isPS)
7852 {
7853  char *lstr = NULL_STR;
7854 
7855 #ifdef PROC_TRACE
7856  traceFunc("== aflVersion()\n");
7857 #endif /* PROC_TRACE */
7858 
7859  if (INFILE(_TITLE_AFL30)) {
7860  lstr = lDebug? "AFL(v3.0#1)" : "AFL-3.0";
7861  }
7862  else if (INFILE(_TITLE_AFL21)) {
7863  lstr = lDebug? "AFL(v2.1#1)" : "AFL-2.1";
7864  }
7865  else if (INFILE(_TITLE_AFL20)) {
7866  lstr = lDebug? "AFL(v2.0#1)" : "AFL-2.0";
7867  }
7868  else if (INFILE(_TITLE_AFL12)) {
7869  lstr = lDebug? "AFL(v1.2#1)" : "AFL-1.2";
7870  }
7871  else if (INFILE(_TITLE_AFL11)) {
7872  lstr = lDebug? "AFL(v1.1#1)" : "AFL-1.1";
7873  }
7874  else if (INFILE(_TITLE_AFL10)) {
7875  lstr = lDebug? "AFL(v1.0#1)" : "AFL-1.0";
7876  }
7877  else {
7878  lstr = "AFL";
7879  }
7880  return lstr;
7881 }
7882 
7891 char *oslVersion(char *filetext, int size, int isML, int isPS)
7892 {
7893  char *lstr = NULL_STR;
7894  /* */
7895 #ifdef PROC_TRACE
7896  traceFunc("== oslVersion()\n");
7897 #endif /* PROC_TRACE */
7898  /* */
7899  if (INFILE(_TITLE_NON_PROFIT_OSL30)) {
7900  lstr = "NPOSL-3.0";
7901  }
7902  else if (INFILE(_TITLE_OSL30)) {
7903  lstr = lDebug? "OSL(v3.0#1)" : "OSL-3.0";
7904  }
7905  else if (INFILE(_TITLE_OSL21)) {
7906  lstr = lDebug? "OSL(v2.1#1)" : "OSL-2.1";
7907  }
7908  else if (INFILE(_TITLE_OSL20)) {
7909  lstr = lDebug? "OSL(v2.0#1)" : "OSL-2.0";
7910  }
7911  else if (INFILE(_TITLE_OSL11)) {
7912  lstr = lDebug? "OSL(v1.1#1)" : "OSL-1.1";
7913  }
7914  else if (INFILE(_TITLE_OSL10)) {
7915  lstr = lDebug? "OSL(v1.0#1)" : "OSL-1.0";
7916  }
7917  else {
7918  lstr = "OSL";
7919  }
7920  return lstr;
7921 }
7922 
7931 char *cddlVersion(char *filetext, int size, int isML, int isPS)
7932 {
7933  char *lstr = NULL_STR;
7934  /* */
7935 #ifdef PROC_TRACE
7936  traceFunc("== cddlVersion()\n");
7937 #endif /* PROC_TRACE */
7938  /* */
7939  if (INFILE(_TITLE_CDDL_10)) {
7940  lstr = "CDDL-1.0";
7941  }
7942  else if (INFILE(_SPDX_CDDL_10)) {
7943  INTERESTING("CDDL-1.0");
7944  }
7945  else if (URL_INFILE(_URL_CDDL_10)) {
7946  lstr = "CDDL-1.0";
7947  }
7948  else if (INFILE(_TITLE_CDDL_11)) {
7949  lstr = "CDDL-1.1";
7950  }
7951  else if (INFILE(_SPDX_CDDL_11)) {
7952  INTERESTING("CDDL-1.1");
7953  }
7954  else if (URL_INFILE(_URL_CDDL)) {
7955  lstr = "CDDL";
7956  }
7957  else {
7958  lstr = "CDDL";
7959  }
7960  return lstr;
7961 }
7962 
7971 char *lpplVersion(char *filetext, int size, int isML, int isPS)
7972 {
7973  char *lstr = NULL_STR;
7974  /* */
7975 #ifdef PROC_TRACE
7976  traceFunc("== lpplVersion()\n");
7977 #endif /* PROC_TRACE */
7978  /* */
7979  if (INFILE(_PHR_LATEX_PL13A_OR_LATER_1) ||
7980  INFILE(_PHR_LATEX_PL13A_OR_LATER_2)) {
7981  if (INFILE(_LT_LATEX_PREAMBLE)) {
7982  lstr = lDebug ? "LPPL-v1.3a(#1)" : "LPPL-1.3a";
7983  }
7984  else {
7985  lstr = "LPPL-1.3a+";
7986  }
7987  }
7988  else if (INFILE(_TITLE_LATEX_PL13A) || INFILE(_PHR_LATEX_PL13A)) {
7989  lstr = lDebug ? "LPPL-v1.3a(#2)" : "LPPL-1.3a";
7990  }
7991  else if (INFILE(_PHR_LATEX_PL13B_OR_LATER_1) ||
7992  INFILE(_PHR_LATEX_PL13B_OR_LATER_2)) {
7993  if (INFILE(_LT_LATEX_PREAMBLE)) {
7994  lstr = lDebug ? "LPPL-v1.3b(#1)" : "LPPL-1.3b";
7995  }
7996  else {
7997  lstr = "LPPL-1.3b+";
7998  }
7999  }
8000  else if (INFILE(_TITLE_LATEX_PL13B) || INFILE(_PHR_LATEX_PL13B)) {
8001  lstr = lDebug ? "LPPL-v1.3b(#2)" : "LPPL-1.3b";
8002  }
8003  else if (INFILE(_PHR_LATEX_PL13C_OR_LATER_1) ||
8004  INFILE(_PHR_LATEX_PL13C_OR_LATER_2)) {
8005  if (INFILE(_LT_LATEX_PREAMBLE)) {
8006  lstr = lDebug ? "LPPL-v1.3c(#1)" : "LPPL-1.3c";
8007  }
8008  else {
8009  lstr = "LPPL-1.3c+";
8010  }
8011  }
8012  else if (INFILE(_TITLE_LATEX_PL13C) || INFILE(_PHR_LATEX_PL13C)) {
8013  lstr = lDebug ? "LPPL-v1.3c(#2)" : "LPPL-1.3c";
8014  }
8015  else if (INFILE(_PHR_LATEX_PL13_OR_LATER_1) ||
8016  INFILE(_PHR_LATEX_PL13_OR_LATER_2)) {
8017  if (INFILE(_LT_LATEX_PREAMBLE)) {
8018  lstr = lDebug ? "LPPL-v1.3(#1)" : "LPPL-1.3";
8019  }
8020  else {
8021  lstr = "LPPL-1.3+";
8022  }
8023  }
8024  else if (INFILE(_TITLE_LATEX_PL13) || INFILE(_PHR_LATEX_PL13)) {
8025  lstr = lDebug ? "LPPL-v1.3(#2)" : "LPPL-1.3";
8026  }
8027  else if (INFILE(_PHR_LATEX_PL12_OR_LATER_1) ||
8028  INFILE(_PHR_LATEX_PL12_OR_LATER_2)) {
8029  if (INFILE(_LT_LATEX_PREAMBLE)) {
8030  lstr = lDebug ? "LPPL-v1.2(#1)" : "LPPL-1.2";
8031  }
8032  else {
8033  lstr = "LPPL-1.2+";
8034  }
8035  }
8036  else if (INFILE(_TITLE_LATEX_PL12) || INFILE(_PHR_LATEX_PL12)) {
8037  lstr = lDebug ? "LPPL-v1.2(#2)" : "LPPL-1.2";
8038  }
8039  else if (INFILE(_PHR_LATEX_PL11_OR_LATER_1) ||
8040  INFILE(_PHR_LATEX_PL11_OR_LATER_2)) {
8041  if (INFILE(_LT_LATEX_PREAMBLE)) {
8042  lstr = lDebug ? "LPPL-v1.1(#1)" : "LPPL-1.1";
8043  }
8044  else {
8045  lstr = "LPPL-1.1+";
8046  }
8047  }
8048  else if (INFILE(_TITLE_LATEX_PL11) || INFILE(_PHR_LATEX_PL11)) {
8049  lstr = lDebug ? "LPPL-v1.1(#2)" : "LPPL-1.1";
8050  }
8051  else if (INFILE(_PHR_LATEX_PL10_OR_LATER_1) ||
8052  INFILE(_PHR_LATEX_PL10_OR_LATER_2)) {
8053  if (INFILE(_LT_LATEX_PREAMBLE)) {
8054  lstr = lDebug ? "LPPL-v1.0(#1)" : "LPPL-1.0";
8055  }
8056  else {
8057  lstr = "LPPL-1.0+";
8058  }
8059  }
8060  else if (INFILE(_TITLE_LATEX_PL10) || INFILE(_PHR_LATEX_PL10)) {
8061  lstr = lDebug ? "LPPL-v1.0(#2)" : "LPPL-1.0";
8062  }
8063  else {
8064  lstr = "LPPL";
8065  }
8066  return lstr;
8067 }
8068 
8077 char *agplVersion(char *filetext, int size, int isML, int isPS)
8078 {
8079  char *lstr = NULL_STR;
8080  /* */
8081 #ifdef PROC_TRACE
8082  traceFunc("== agplVersion()\n");
8083 #endif /* PROC_TRACE */
8084  /* */
8085  /*
8086  * Look for version 1 BEFORE version 3; the text of version 1 license says
8087  * you can also license it under GPL version 3... same reasoning goes with
8088  * the actual v3 license (vs the reference).
8089  */
8090  if (INFILE(_PHR_AGPL_10_or_later)
8091  || INFILE(_TITLE_AGPL_10_or_later)
8092  || INFILE(_SPDX_AGPL_10_or_later)
8093  || HASTEXT(_SPDX_AGPL_10plus, REG_EXTENDED)
8094  || HASTEXT(_PHR_AGPL_10plus, REG_EXTENDED))
8095  {
8096  lstr = "AGPL-1.0-or-later";
8097  }
8098  else if (INFILE(_PHR_FSF_V1_ONLY)
8099  || INFILE(_TITLE_AGPL_10_only)
8100  || INFILE(_SPDX_AGPL_10))
8101  {
8102  lstr = "AGPL-1.0-only";
8103  }
8104  else if (INFILE(_PHR_AGPL_30_or_later)
8105  || INFILE(_TITLE_AGPL_30_or_later_ref1)
8106  || INFILE(_TITLE_AGPL_30_or_later)
8107  || INFILE(_SPDX_AGPL_30_or_later)
8108  || HASTEXT(_SPDX_AGPL_30plus, REG_EXTENDED)
8109  || HASTEXT(_PHR_AGPL_30plus, REG_EXTENDED))
8110  {
8111  if (INFILE(_LT_AGPL_30)) {
8112  lstr = lDebug ? "Affero-v3(#1)" : "AGPL-3.0-only";
8113  }
8114  else {
8115  lstr = "AGPL-3.0-or-later";
8116  }
8117  }
8118  else if (HASTEXT(_PHR_AGPL_30_1, REG_EXTENDED) || INFILE(_SPDX_AGPL_30)) {
8119  lstr = "AGPL-3.0-only";
8120  }
8121  else if (GPL_INFILE(_PHR_FSF_V3_ONLY)) {
8122  if (INFILE(_TITLE_GPL3)) {
8123  lstr = lDebug ? "GPLv3(Affero#1)" : "GPL-3.0-only";
8124  }
8125  else if (INFILE(_LT_GPL3ref3)){
8126  lstr = lDebug ? "GPLv3(special)" : "GPL-3.0-only";
8127  }
8128  else {
8129  lstr = lDebug ? "Affero-v3(#2)" : "AGPL-3.0-only";
8130  }
8131  }
8132  else if (INFILE(_TITLE_AGPL_30_only)) {
8133  lstr = lDebug ? "Affero-v3(#3)" : "AGPL-3.0-only";
8134  }
8135  else if (INFILE(_TITLE_GPL3)) {
8136  lstr = lDebug ? "GPLv3(Affero#2)" : "GPL-3.0-only";
8137  }
8138  else if (URL_INFILE(_URL_AGPL3)) {
8139  lstr = lDebug ? "Affero-v3(url)" : "AGPL-3.0-only";
8140  }
8141  else {
8142  lstr = "AGPL";
8143  }
8144  return lstr;
8145 }
8146 
8155 char *gfdlVersion(char *filetext, int size, int isML, int isPS)
8156 {
8157  char *lstr = NULL_STR;
8158  /* */
8159 #ifdef PROC_TRACE
8160  traceFunc("== gfdlVersion()\n");
8161 #endif /* PROC_TRACE */
8162  /* */
8163  /*
8164  * Have to be careful here; the text of the 1.2 license says it's licensed
8165  * under 1.1 or later - have to be careful what we're looking for, and in a
8166  * specific order
8167  */
8168  if (INFILE(_TITLE_GFDL_V13_FULL_LICENSE)) {
8169  lstr = "GFDL-1.3";
8170  /* Full GFDL-1.3 license text has a reference to Creative Commons */
8171  if (HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
8172  lmem[_fCCBY] = 1;
8173  }
8174  }
8175  else if (INFILE(_TITLE_GFDL_V13_OR_LATER)) {
8176  lstr = "GFDL-1.3-or-later";
8177  }
8178  else if (INFILE(_TITLE_GFDL_V13_ONLY)) {
8179  lstr = lDebug ? "GFDL-1.3(#1)" : "GFDL-1.3";
8180  }
8181  else if (INFILE(_TITLE_GFDL_V12_FULL_LICENSE)) {
8182  lstr = lDebug ? "GFDL-1.2-only(#1)" : "GFDL-1.2-only";
8183  }
8184  else if (INFILE(_PHR_FSF_V12_OR_LATER) ||
8185  INFILE(_TITLE_GFDL_V12_OR_LATER)) {
8186  lstr = "GFDL-1.2-or-later";
8187  }
8188  else if (INFILE(_TITLE_GFDL_V12_ONLY)) {
8189  lstr = lDebug ? "GFDL-1.2-only(#1)" : "GFDL-1.2-only";
8190  }
8191  else if (INFILE(_TITLE_GFDL_V11_FULL_LICENSE)) {
8192  lstr = lDebug ? "GFDL-1.1-only(#1)" : "GFDL-1.1-only";
8193  }
8194  else if (INFILE(_PHR_FSF_V11_OR_LATER) ||
8195  INFILE(_TITLE_GFDL_V11_OR_LATER)) {
8196  lstr = "GFDL-1.1-or-later";
8197  }
8198  else if (INFILE(_TITLE_GFDL_V11_ONLY)) {
8199  lstr = lDebug ? "GFDL-1.1-only(#1)" : "GFDL-1.1-only";
8200  }
8201  else if (INFILE(_PHR_FSF_V12_ONLY)) {
8202  lstr = lDebug ? "GFDL-1.2-only(#2)" : "GFDL-1.2-only";
8203  }
8204  else if (INFILE(_PHR_FSF_V11_ONLY)) {
8205  lstr = lDebug ? "GFDL-1.1-only(#2)" : "GFDL-1.1-only";
8206  }
8207  else {
8208  lstr = "GFDL";
8209  }
8210  return lstr;
8211 }
8212 
8221 char *lgplVersion(char *filetext, int size, int isML, int isPS)
8222 {
8223  char *lstr = NULL_STR;
8224  /* */
8225 #ifdef PROC_TRACE
8226  traceFunc("== lgplVersion()\n");
8227 #endif /* PROC_TRACE */
8228  /* */
8229  if ((INFILE(_PHR_LGPL21_OR_LATER_1)
8230  || INFILE(_PHR_LGPL21_OR_LATER_2)
8231  || HASTEXT(_PHR_LGPL21_OR_LATER_3, REG_EXTENDED)
8232  || HASTEXT(_PHR_LGPL21_OR_LATER_4, REG_EXTENDED))
8233  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
8234  {
8235  if (INFILE(_TITLE_LGPL_KDE)) {
8236  lstr = "LGPL-2.1-or-later-KDE-exception";
8237  }
8238  else {
8239  lstr = "LGPL-2.1-or-later";
8240  }
8241  }
8242  else if ((INFILE(_PHR_LGPL3_OR_LATER)
8243  || INFILE(_PHR_LGPL3_OR_LATER_ref1)
8244  || INFILE(_PHR_LGPL3_OR_LATER_ref2)
8245  || HASTEXT(_PHR_LGPL3_OR_LATER_ref3, REG_EXTENDED)
8246  || HASTEXT(_SPDX_LGPL_30plus, REG_EXTENDED)
8247  || HASTEXT(_PHR_LGPL_30plus, REG_EXTENDED))
8248  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
8249  {
8250  lstr = "LGPL-3.0-or-later";
8251  }
8252  else if (INFILE(_LT_LGPL3ref) && NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
8253  lstr = "LGPL-3.0-only";
8254  lmem[_mLGPL] = 1;
8255  }
8256  else if (GPL_INFILE(_PHR_LGPL3_ONLY)
8257  || INFILE(_FILE_LGPLv3)
8258  || GPL_INFILE(_PHR_LGPL3_ONLY_ref1)
8259  || GPL_INFILE(_PHR_LGPL3_ONLY_ref2))
8260  {
8261  lstr = "LGPL-3.0-only";
8262  }
8263  else if (INFILE(_PHR_LGPL21_ONLY)
8264  || INFILE(_FILE_LGPLv21)
8265  || URL_INFILE(_URL_LGPL_V21)
8266  || INFILE(_PHR_LGPL21_ONLY_ref)
8267  || INFILE(_PHR_LGPL21_ONLY_ref2)
8268  || INFILE(_PHR_LGPL21_ONLY_ref3)
8269  || INFILE(_PHR_LGPL21_ONLY_ref4))
8270  {
8271  lstr = "LGPL-2.1-only";
8272  }
8273  else if ((INFILE(_PHR_LGPL2_OR_LATER)
8274  || HASTEXT(_PHR_LGPL2_OR_LATER_2, REG_EXTENDED)
8275  || HASTEXT(_PHR_LGPL2_OR_LATER_3, REG_EXTENDED))
8276  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
8277  {
8278  lstr = "LGPL-2.0-or-later";
8279  }
8280  else if (RM_INFILE(_PHR_LGPL2_ONLY) || RM_INFILE(_PHR_LGPL2_ONLY_ref1) || INFILE(_FILE_LGPLv2)) {
8281  lstr = "LGPL-2.0-only";
8282  }
8283  else if (INFILE(_PHR_LGPL1_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8284  lstr = "LGPL-1.0-or-later";
8285  }
8286  else if (INFILE(_PHR_LGPL1_ONLY) || INFILE(_PHR_FSF_V1_ONLY)) {
8287  lstr = "LGPL-1.0-only";
8288  }
8289  else if (URL_INFILE(_URL_CCLGPL_V21)) {
8290  lstr = lDebug ? "CC-LGPL-2.1" : "LGPL-2.1-only";
8291  }
8292  else if (INFILE(_LT_CC_GPL) || INFILE(_TITLE_CC_LGPL)) {
8293  lstr = "CC-LGPL";
8294  }
8295  else if (NY_INFILE(_TEXT_LGPLV3) && NOT_INFILE(_TEXT_LGPLV3_FOOTNOTE) &&
8296  HASREGEX(_TEXT_LGPLV3, filetext)) {
8297  lstr = lDebug ? "LGPL-v3(#2)" : "LGPL-3.0-only";
8298  }
8299  else if (INFILE(_TEXT_LGPLV21) &&
8300  HASREGEX(_TEXT_LGPLV21, filetext)) {
8301  lstr = lDebug ? "LGPL-v2.1(#2)" : "LGPL-2.1-only";
8302  }
8303  else if (INFILE(_TEXT_LGPLV2) &&
8304  HASREGEX(_TEXT_LGPLV2, filetext)) {
8305  lstr = lDebug ? "LGPL-v2(#2)" : "LGPL-2.0-only";
8306  }
8307  else if (INFILE(_SPDX_LGPL_20)) {
8308  lstr = "LGPL-2.0-only";
8309  }
8310  else if (INFILE(_SPDX_LGPL_21)) {
8311  lstr = "LGPL-2.1-only";
8312  }
8313  else if (INFILE(_SPDX_LGPL_30)) {
8314  lstr = "LGPL-3.0-only";
8315  }
8316  else {
8317  lstr = "LGPL";
8318  }
8319  return lstr;
8320 }
8321 
8330 char *gplVersion(char *filetext, int size, int isML, int isPS)
8331 {
8332  char *cp, *lstr = NULL_STR;
8333  /* */
8334 #ifdef PROC_TRACE
8335  traceFunc("== gplVersion()\n");
8336 #endif /* PROC_TRACE */
8337  /* */
8338 
8339  /*
8340  * GPL-3.0-only cases
8341  */
8342  if (GPL_INFILE(_PHR_GPL3_OR_LATER_ref2)
8343  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref3)
8344  || GPL_INFILE(_PHR_GPL3_OR_LATER)
8345  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref1)
8346  || HASTEXT(_SPDX_GPL_30plus, REG_EXTENDED)
8347  || HASTEXT(_PHR_GPL_30plus, REG_EXTENDED))
8348  {
8349  if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8350  lstr = "GPL-3.0-or-later";
8351  if (INFILE(_PHR_GPL2_OR_LATER_1)) {
8352  lstr = "GPL-2.0-or-later,GPL-3.0-or-later";
8353  }
8354  }
8355  }
8356  else if (GPL_INFILE(_PHR_FSF_V3_ONLY)
8357  || GPL_INFILE(_PHR_GPL3_ONLY)
8358  || INFILE(_FILE_GPLv3)
8359  || GPL_INFILE(_PHR_GPL3_ONLY_ref1)
8360  || GPL_INFILE(_PHR_GPL3_ONLY_ref2)) {
8361  lstr = lDebug ? "GPL-v3(#2)" : "GPL-3.0-only";
8362  if (INFILE(_PHR_GPL2_OR_LATER_1))
8363  {
8364  lstr = "GPL-2.0-or-later,GPL-3.0-only";
8365  }
8366  }
8367  else if (NY_INFILE(_TEXT_GPLV3) && NOT_INFILE(_TEXT_GPLV3_FOOTNOTE) &&
8368  HASREGEX(_TEXT_GPLV3, filetext)) {
8369  lstr = lDebug ? "GPL-v3(#3)" : "GPL-3.0-only";
8370  }
8371  /*
8372  * GPL-2.0-only cases
8373  */
8374  else if (HASTEXT(_LT_GPL_V2_NAMED_later, REG_EXTENDED) || INFILE(_TITLE_GPL2_ref1_later)) {
8375  lstr = lDebug ? "GPLV2+(named)" : "GPL-2.0-or-later";
8376  }
8377  else if (HASTEXT(_SPDX_GPL_20_or_later, REG_EXTENDED)) {
8378  lstr = lDebug ? "GPL-2.0-or-later(SPDX)" : "GPL-2.0-or-later";
8379  }
8380  else if (INFILE(_PHR_GPL2_OR_LATER_1)) {
8381  if (INFILE(_TITLE_GPL_KDE)) {
8382  lstr = "GPL-2.0-or-laterKDEupgradeClause";
8383  }
8384  else if (INFILE(_PHR_GPL2_ONLY_2) || INFILE(_PHR_GPL2_ONLY_3)) {
8385  lstr = "GPL-2.0-only";
8386  }
8387  else if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8388  lstr = lDebug ? "PHR(GPL2_OR_LATER#3)" : "GPL-2.0-or-later";
8389  }
8390  else if (INFILE(_TITLE_GPL2_ref1) || INFILE(_TITLE_GPL2_ref2)) {
8391  lstr = lDebug ? "GPL-2.0-only(title)" : "GPL-2.0-only";
8392  }
8393  }
8394  else if (HASTEXT(_SPDX_GPL_20, REG_EXTENDED)) {
8395  lstr = lDebug ? "GPL-2.0-only(SPDX)" : "GPL-2.0-only";
8396  }
8397  else if (INFILE(_PHR_GPL2_ONLY_4)) {
8398  lstr = "GPL-2.0-only";
8399  }
8400  else if (INFILE(_PHR_GPL2_ONLY_5)) {
8401  lstr = "GPL-2.0-only";
8402  }
8403  else if (GPL_INFILE(_PHR_GPL2_OR_GPL3)) {
8404  lstr = "GPL-2.0-only,GPL-3.0-only";
8405  }
8406  else if (INFILE(_PHR_FSF_V2_ONLY) || INFILE(_PHR_GPL2_ONLY) || INFILE(_PHR_GPL2_ONLY_1) ||
8407  INFILE(_FILE_GPLv2) || INFILE(_LT_GPL_V2_NAMED)) {
8408  lstr = lDebug ? "GPL-v2(#2)" : "GPL-2.0-only";
8409  }
8410  else if (INFILE(_LT_GPL_V2_ref5)) {
8411  lstr = lDebug ? "GPL-2.0-only(ref5)" : "GPL-2.0-only";
8412  }
8413  else if (NY_INFILE(_TEXT_GPLV2)) {
8414  lstr = lDebug ? "GPL-v2(#3)" : "GPL-2.0-only";
8415  }
8416  /*
8417  * GPL-1.0-only cases
8418  */
8419  else if (GPL_INFILE(_PHR_FSF_V1_OR_LATER)
8420  || INFILE(_PHR_GPL1_OR_LATER)
8421  || HASTEXT(_SPDX_GPL_10plus, REG_EXTENDED)
8422  || HASTEXT(_PHR_GPL_10plus, REG_EXTENDED))
8423  {
8424  if (INFILE(_TITLE_GPL1)) {
8425  lstr = lDebug ? "GPL-v1(#1)" : "GPL-1.0-only";
8426  }
8427  else if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8428  lstr = "GPL-1.0-or-later";
8429  }
8430  }
8431  else if (INFILE(_PHR_FSF_V1_ONLY) || INFILE(_PHR_GPL1_ONLY)) {
8432  lstr = lDebug ? "GPL-v1(#2)" : "GPL-1.0-only";
8433  }
8434  else if (URL_INFILE(_URL_CCGPL_V2)) {
8435  lstr = "GPL-2.0-only";
8436  }
8437  else if (INFILE(_LT_CC_GPL) || INFILE(_TITLE_CC_GPL)) {
8438  lstr = lDebug ? "GPL(CC_GPL)" : "GPL";
8439  }
8440  else if (NY_INFILE(_TEXT_GPLV1) &&
8441  HASREGEX(_TEXT_GPLV1, filetext)) {
8442  lstr = lDebug ? "GPL-v1(#3)" : "GPL-1.0-only";
8443  }
8444  else if (HASTEXT(_SPDX_GPL_10, REG_EXTENDED)) {
8445  lstr = lDebug ? "GPL-1.0-only(SPDX)" : "GPL-1.0-only";
8446  }
8447  else if (HASTEXT(_SPDX_GPL_30, REG_EXTENDED)) {
8448  lstr = lDebug ? "GPL-3.0-only(SPDX)" : "GPL-3.0-only";
8449  }
8450  /* special case for Debian copyright files
8451  Moved from the beginning here under else if ... is this anymore needed
8452  */
8453  else if (INFILE(_TEXT_GPLV3_CR) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8454  lstr = "GPL-3.0-only";
8455  }
8456  else if (INFILE(_FILE_GPL1) || INFILE(_FILE_GPL2)) {
8457  lstr = lDebug ? "GPL(deb)" : "GPL";
8458  }
8459  /*
8460  * MODULE("GPL") cannot be unambiguously interpreted as GPL-2.0-only
8461  * license. Same statement is used also outside Linux kernel.
8462  * Furthermore, many of the files which have this MODULE statement,
8463  * have explicit GPL license statement. Therefore this is changed
8464  * to GPL.
8465  */
8466  else if (INFILE(_TITLE_MODULE_LICENSE_GPL)) {
8467  lstr = lDebug ? "GPL(linux-kernel)" : "GPL";
8468  }
8469  /*
8470  * Finally let's see if there is a type error in license version
8471  */
8472  else if (INFILE(_PHR_GPL21_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
8473  lstr = "GPL-2.1+[sic]";
8474  }
8475  else if (INFILE(_PHR_FSF_V21_ONLY) || INFILE(_PHR_GPL21_ONLY)) {
8476  lstr = lDebug ? "GPL-v2.1[sic]" : "GPL-2.1[sic]";
8477  }
8478  /*
8479  * Special case, HACK: "Debian packaging ... licensed under GPL"
8480  *****
8481  * IF we've scanned the regex that might contain it, then kludge.buf != NULL.
8482  * Make darn sure that pointer IS set to NULL before leaving this routine.
8483  */
8484  if (lstr == NULL_STR && kludge.base != NULL_STR) {
8485 #ifdef PHRASE_DEBUG
8486  printf("GPL-META-CHECK: base %p, so %d eo %d\n",
8487  kludge.base, kludge.sso, kludge.seo);
8488 #endif /* PHRASE_DEBUG */
8489  cp = kludge.base + (kludge.sso < 256 ? 0 : kludge.sso-256);
8490  if (HASREGEX(_LT_GPL_META_DEBIAN, cp)) {
8491  lstr = "GPL-Meta";
8492  }
8493  kludge.base = NULL_STR;
8494  }
8495  if (lstr == NULL_STR && NOT_INFILE(_PHR_JYTHON_NOTGPL) && !HASTEXT(_TITLE_QT_GPL_EXCEPTION_10, 0) && !HASTEXT(_LT_OPENBSD_GPL_EXCEPTION, 0)) {
8496  lstr = lDebug ? "GPL(NULL)" : "GPL";
8497  }
8498  return lstr;
8499 }
8500 
8509 char *cplVersion(char *filetext, int size, int isML, int isPS)
8510 {
8511  char *lstr = NULL_STR;
8512  /* */
8513 #ifdef PROC_TRACE
8514  traceFunc("== cplVersion()\n");
8515 #endif /* PROC_TRACE */
8516  /* */
8517  if (INFILE(_TITLE_CPL_10)) {
8518  lstr = "CPL-1.0";
8519  }
8520  else if (URL_INFILE(_URL_CPL_10)) {
8521  lstr = "CPL-1.0";
8522  }
8523  else if (INFILE(_TITLE_CPL_05)) {
8524  lstr = "CPL-0.5";
8525  }
8526  else {
8527  lstr = "CPL";
8528  }
8529  return lstr;
8530 }
8531 
8540 char *ccVersion(char *filetext, int size, int isML, int isPS)
8541 {
8542  char *lstr = NULL_STR;
8543  /* */
8544 #ifdef PROC_TRACE
8545  traceFunc("== ccVersion()\n");
8546 #endif /* PROC_TRACE */
8547  /*
8548  * Creative Commons Attribution-ShareAlike
8549  */
8550  if (INFILE(_TITLE_CC_BY_SA_10) || URL_INFILE(_URL_CC_BY_SA_10)) {
8551  lstr = "CC-BY-SA-1.0";
8552  }
8553  else if (INFILE(_TITLE_CC_BY_SA_20) || URL_INFILE(_URL_CC_BY_SA_20)) {
8554  lstr = "CC-BY-SA-2.0";
8555  }
8556  else if (INFILE(_TITLE_CC_BY_SA_25) || URL_INFILE(_URL_CC_BY_SA_25)) {
8557  lstr = "CC-BY-SA-2.5";
8558  }
8559  else if (INFILE(_TITLE_CC_BY_SA_30) || URL_INFILE(_URL_CC_BY_SA_30)) {
8560  lstr = "CC-BY-SA-3.0";
8561  }
8562  else if (INFILE(_PHR_CC_BY_SA_30)) {
8563  lstr = "CC-BY-SA-3.0";
8564  }
8565  else if (INFILE(_TITLE_CC_BY_SA_40) || URL_INFILE(_URL_CC_BY_SA_40)) {
8566  lstr = "CC-BY-SA-4.0";
8567  }
8568  else if (URL_INFILE(_URL_CC_BY_SA_20)) {
8569  lstr = "CC-BY-SA-2.0";
8570  }
8571  else if (INFILE(_TITLE_CC_BY_SA) || URL_INFILE(_URL_CC_BY_SA)) {
8572  lstr = lDebug ? "CCA-SA(1)" : "CC-BY-SA";
8573  }
8574  /*
8575  * Creative Commons Attribution-NonCommercial-ShareAlike
8576  */
8577  else if (INFILE(_TITLE_CC_BY_NC_SA_40) || URL_INFILE(_URL_CC_BY_NC_SA_40)) {
8578  lstr = "CC-BY-NC-SA-4.0";
8579  }
8580  else if (INFILE(_TITLE_CC_BY_NC_SA_30) || URL_INFILE(_URL_CC_BY_NC_SA_30)) {
8581  lstr = "CC-BY-NC-SA-3.0";
8582  }
8583  else if (INFILE(_TITLE_CC_BY_NC_SA_25) || URL_INFILE(_URL_CC_BY_NC_SA_25)) {
8584  lstr = "CC-BY-NC-SA-2.5";
8585  }
8586  else if (INFILE(_TITLE_CC_BY_NC_SA_20) || URL_INFILE(_URL_CC_BY_NC_SA_20)) {
8587  lstr = "CC-BY-NC-SA-2.0";
8588  }
8589  else if (INFILE(_TITLE_CC_BY_NC_SA_10) || URL_INFILE(_URL_CC_BY_NC_SA_10)) {
8590  lstr = "CC-BY-NC-SA-1.0";
8591  }
8592  /*
8593  * Creative Commons NonCommercial NoDerivs
8594  */
8595  else if (INFILE(_TITLE_CC_BY_NC_ND_40) || URL_INFILE(_URL_CC_BY_NC_ND_40)) {
8596  lstr = "CC-BY-NC-ND-4.0";
8597  }
8598  else if (INFILE(_TITLE_CC_BY_NC_ND_30) || URL_INFILE(_URL_CC_BY_NC_ND_30)) {
8599  lstr = "CC-BY-NC-ND-3.0";
8600  }
8601  else if (INFILE(_TITLE_CC_BY_NC_ND_25) || URL_INFILE(_URL_CC_BY_NC_ND_25)) {
8602  lstr = "CC-BY-NC-ND-2.5";
8603  }
8604  else if (INFILE(_TITLE_CC_BY_NC_ND_20) || URL_INFILE(_URL_CC_BY_NC_ND_20)) {
8605  lstr = "CC-BY-NC-ND-2.0";
8606  }
8607  else if (INFILE(_TITLE_CC_BY_NC_ND_10) || INFILE(_TITLE_CC_BY_NC_ND_10_1) || URL_INFILE(_URL_CC_BY_NC_ND_10)) {
8608  lstr = "CC-BY-NC-ND-1.0";
8609  }
8610  /*
8611  * Creative Commons NonCommercial
8612  */
8613  else if (INFILE(_TITLE_CC_BY_NC_40) || URL_INFILE(_URL_CC_BY_NC_40)) {
8614  lstr = "CC-BY-NC-4.0";
8615  }
8616  else if (INFILE(_TITLE_CC_BY_NC_30) || URL_INFILE(_URL_CC_BY_NC_30)) {
8617  lstr = "CC-BY-NC-3.0";
8618  }
8619  else if (INFILE(_TITLE_CC_BY_NC_25) || URL_INFILE(_URL_CC_BY_NC_25)) {
8620  lstr = "CC-BY-NC-2.5";
8621  }
8622  else if (INFILE(_TITLE_CC_BY_NC_20) || URL_INFILE(_URL_CC_BY_NC_20)) {
8623  lstr = "CC-BY-NC-2.0";
8624  }
8625  else if (INFILE(_TITLE_CC_BY_NC_10) || URL_INFILE(_URL_CC_BY_NC_10)) {
8626  lstr = "CC-BY-NC-1.0";
8627  }
8628  /*
8629  * Creative Commons Attribution-NoDerivatives
8630  */
8631  else if (INFILE(_TITLE_CC_BY_ND_40) || URL_INFILE(_URL_CC_BY_ND_40)) {
8632  lstr = "CC-BY-ND-4.0";
8633  }
8634  else if (INFILE(_TITLE_CC_BY_ND_30) || URL_INFILE(_URL_CC_BY_ND_30)) {
8635  lstr = "CC-BY-ND-3.0";
8636  }
8637  else if (INFILE(_TITLE_CC_BY_ND_25) || URL_INFILE(_URL_CC_BY_ND_25)) {
8638  lstr = "CC-BY-ND-2.5";
8639  }
8640  else if (INFILE(_TITLE_CC_BY_ND_20) || URL_INFILE(_URL_CC_BY_ND_20)) {
8641  lstr = "CC-BY-ND-2.0";
8642  }
8643  else if (INFILE(_TITLE_CC_BY_ND_10) || URL_INFILE(_URL_CC_BY_ND_10)) {
8644  lstr = "CC-BY-ND-1.0";
8645  }
8646  /*
8647  * Creative Commons Attribution
8648  */
8649  else if (INFILE(_TITLE_CC_BY_10) || URL_INFILE(_URL_CC_BY_10)) {
8650  lstr = "CC-BY-1.0";
8651  }
8652  else if (INFILE(_TITLE_CC_BY_20) || URL_INFILE(_URL_CC_BY_20)) {
8653  lstr = "CC-BY-2.0";
8654  }
8655  else if (INFILE(_TITLE_CC_BY_25) || URL_INFILE(_URL_CC_BY_25)) {
8656  lstr = "CC-BY-2.5";
8657  }
8658  else if (INFILE(_TITLE_CC_BY_30) || URL_INFILE(_URL_CC_BY_30)) {
8659  lstr = "CC-BY-3.0";
8660  }
8661  else if (INFILE(_TITLE_CC_BY_40) || URL_INFILE(_URL_CC_BY_40)) {
8662  lstr = "CC-BY-4.0";
8663  }
8664  /*
8665  * Creative Commons CC0
8666  */
8667  else if (INFILE(_TITLE_CC0_10_2)) {
8668  lstr = lDebug ? "CC0(2)" : "CC0-1.0";
8669  }
8670  else if (INFILE(_PHR_CC0_2)) {
8671  lstr = lDebug ? "CC0(2)" : "CC0-1.0";
8672  }
8673  else if (URL_INFILE(_URL_CC0)) {
8674  lstr = lDebug ? "CC0(URL)" : "CC0-1.0";
8675  }
8676  else if (URL_INFILE(_URL_CC_PDDC)) {
8677  lstr = lDebug ? "CC(PD)" : "CC-PDDC";
8678  pd = 1;
8679  }
8680  else if (INFILE(_TITLE_CCPL)) {
8681  INTERESTING("CCPL");
8682  }
8683  else if (INFILE(_TITLE_CC_BY)) {
8684  lstr = lDebug ? "CCA(1)" : "CC-BY";
8685  }
8686  else {
8687  lstr = lDebug ? "CCA(def)" : "CC-BY";
8688  }
8689  lmem[_fCCBY] = 1;
8690  return lstr;
8691 }
8692 
8709 int findPhrase(int index, char *filetext, int size, int isML, int isPS,
8710  int qType)
8711 {
8712  char *ptr = NULL_STR;
8713  char *q = ltsr+index;
8714  char *cp = 0;
8715  int ret;
8716  int i;
8717  int j;
8718  int n;
8719  int wordMatch = 0;
8720  int metaKludge = 0;
8721  int saved = 0;
8722  int sso;
8723  int seo;
8724  item_t *sp;
8725  item_t *op;
8726  list_t *lp;
8727  licText_t *ltp;
8728 #ifdef PARSE_STOPWATCH
8729  DECL_TIMER; /* timer declaration */
8730  char timerName[64];
8731 #endif /* PARSE_STOPWATCH */
8732 
8733 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG) || defined(DOCTOR_DEBUG)
8734  traceFunc("== findPhrase(%d, %p, %d, %d, %d, %d)\n", index, filetext,
8735  size, isML, isPS, qType);
8736  traceFunc("... (regex) \"%s\"\n", _REGEX(index));
8737  traceFunc("... (seed) \"%s\"\n", _SEED(index));
8738 #endif /* PROC_TRACE || PHRASE_DEBUG || DOCTOR_DEBUG */
8739 
8740  ltp = licText + index; /* &licText[index] */
8741  if (ltp->tseed == NULL_STR) {
8742  LOG_FATAL("Regex #%d not suitable for findPhrase()", index)
8743  Bail(-__LINE__);
8744  }
8745  *q |= LTSR_SMASK; /* init: tested, no match */
8746 #ifdef PARSE_STOPWATCH
8747  (void) sprintf(timerName, "findPhrase(%03d): ", index);
8748  START_TIMER;
8749 #endif /* PARSE_STOPWATCH */
8750 #if (DEBUG > 5)
8751  printf("findPhrase: firstword[%d] == \"%s\", used = %d\n", index,
8752  ltp->tseed, searchList.used);
8753 #endif /* DEBUG > 5 */
8754  /*
8755  * See if the first-word of the requested entry has been searched
8756  * previously. The entry we get from listGetItem() refCount (val) field is:
8757  * =0 if this is the first search for this word (non-zero == "seen it"!)
8758  * <0 if the word was NOT FOUND
8759  * >0 if we have doctored-text results cached
8760  */
8761  if ((sp = listGetItem(&searchList, ltp->tseed)) == NULL_ITEM) {
8762  LOG_FATAL("search cache")
8763  Bail(-__LINE__);
8764  }
8765  if (sp->refCount < 0) { /* tseed not found in text */
8766  sp->refCount--;
8767 #ifdef PARSE_STOPWATCH
8768  END_TIMER; /* stop the timer */
8769  (void) strcat(timerName, "Cache-NO - ");
8770  (void) strcat(timerName, ltp->tseed);
8771  PRINT_TIMER(timerName, 0);
8772 #endif /* PARSE_STOPWATCH */
8773  return(0);
8774  }
8775  else if (sp->refCount == 0) { /* e.g., first occurence */
8776 
8777  /*
8778  * Since this is the first search of this word, see if it's in the text.
8779  * NOTE: getInstances() returns a pointer to static (non-allocated) storage
8780  */
8781  if ((cur.nLines) <= 5) {
8782  i = 1;
8783  j = 2;
8784  } else if ((size / cur.nLines) <= 10) {
8785  i = 2;
8786  j = 4;
8787  } else {
8788  i = 3;
8789  j = 6;
8790  }
8791 
8792  /* change to not get record offsets since there is a good sized memory
8793  leak in that code */
8794  //ptr = getInstances(filetext, size, i, j, sp->str, YES);
8795  ptr = getInstances(filetext, size, i, j, sp->str, NO);
8796 
8797  if (ptr == NULL_STR) {
8798  sp->refCount = -1;
8799  /* sp->buf = NULL_STR; */
8800 #ifdef PARSE_STOPWATCH
8801  END_TIMER; /* stop the timer */
8802  (void) strcat(timerName, "tseed-NO - ");
8803  (void) strcat(timerName, ltp->tseed);
8804  PRINT_TIMER(timerName, 0);
8805 #endif /* PARSE_STOPWATCH */
8806  return(0); /* known !match */
8807  }
8808  sp->buf = copyString(ptr, "paragraph");
8809 #ifdef MEMSTATS
8810  printf("... adding %d bytes (search-lookup: \"%s\")\n",
8811  strlen(sp->buf), sp->str);
8812 #endif /* MEMSTATS */
8813  /*
8814  * If the search-seed and regex are the same, we found what we're looking
8815  * for. Else, use doctorBuffer() to strip out punctuation, XML/HTML
8816  * directives, etc.
8817  */
8818 #ifdef PARSE_STOPWATCH
8819  START_TIMER;
8820 #endif /* PARSE_STOPWATCH */
8821 #ifdef DOCTOR_DEBUG
8822  printf(" ... doctoring buffer for \"%s\"\n", sp->str);
8823 #endif /* DOCTOR_DEBUG */
8824  (void) doctorBuffer(sp->buf, isML, isPS, NO);
8825 #ifdef PARSE_STOPWATCH
8826  RESET_TIMER;
8827  (void) sprintf(timerName, "... doctor(%03d): %s (%d)",
8828  index, ltp->tseed, strlen(sp->buf));
8829  PRINT_TIMER(timerName, 0);
8830 #endif /* PARSE_STOPWATCH */
8831  }
8832  sp->refCount++; /* incr ref-count for this seed */
8833  /*
8834  * We need populate the list of "paragraph matches" with offsets in the
8835  * doctored-up buffers; this seems the best place to do it.
8836  */
8837  op = listGetItem(&cur.offList, sp->str);
8838  if (op->nMatch <= 0) {
8839  LOG_FATAL("File-offset list, nMatch(%s): bad entry", sp->str)
8840  Bail(-__LINE__);
8841  }
8842 #if DEBUG>5
8843  printf("matches for key \"%s\": %d\n", sp->str, op->nMatch);
8844 #endif /* DEBUG>5 */
8845  n = strlen(sp->buf);
8846  lp = (list_t *)op->bList;
8847  if ((lp) && (lp->items[0].bDocLen == 0)) {
8848  if (op->nMatch == 1) {
8849  lp->items[0].bDocLen = n;
8850  } else {
8851  ptr = sp->buf;
8852  i = j = 0; /* i is index, j is total offset */
8853  while (strGrep(" xyzzy ", ptr, REG_ICASE)) {
8854  lp->items[i++].bDocLen = j + cur.regm.rm_so;
8855  ptr += cur.regm.rm_eo;
8856  j += (cur.regm.rm_eo + 7); /* strlen(" xyzzy ") */
8857  }
8858  lp->items[i].bDocLen = n + 7; /* last paragraph */
8859  }
8860  }
8861  if (ltp->tseed == ltp->regex) { /* e.g., regex IS seed/key */
8862  wordMatch++;
8863  ret = 1;
8864  } else {
8865  metaKludge = ((qType == 2) && (index == _LT_GPLref1));
8866  if (metaKludge || qType == 4) {
8867  saved = 1;
8868  gl.flags |= FL_SAVEBASE;
8869  }
8870  ret = HASREGEX_RI(index, sp->buf);
8871  if (saved) {
8872  if (ret) {
8873  kludge.base = cur.matchBase;
8874  kludge.sso = cur.regm.rm_so;
8875  kludge.seo = cur.regm.rm_eo;
8876  }
8877  gl.flags &= ~FL_SAVEBASE;
8878  }
8879  }
8880  sso = cur.regm.rm_so; /* do NOT modify this!! */
8881  seo = cur.regm.rm_eo; /* ... or this, either! */
8882  if (ret && !wordMatch) {
8883  *q = LTSR_YES; /* remember this "yes" search result */
8884 
8885  /*
8886  * VERY low-level string-search kludges happen here. This is VERY ugly!!
8887  *****
8888  * If we used idxGrep to search for "GPL" in a "doctored" buffer, we do NOT
8889  * want to match "lesser GPL" or "library GPL" in our searches (it's the
8890  * wrong license name/title). Unfortunately, two aliases for LGPL are
8891  * exactly those above. If we match "GPL" with a wildcard preceeding it, it
8892  * JUST MIGHT BE those words. Rather than perform 2 exclusionary searches
8893  * one for "lesser gpl" and another for "library gpl", look here and if we
8894  * find it, (ugh) KLUDGE the return value to indicate "no match"...
8895  *****
8896  * However, since it's here, it's now extensible. Next search-string kludge
8897  * (that cannot be quickly fixed via changing a regex) should be number 2.
8898  * Just make a new macro (defined above parseLicenses), ala GPL_INFILE().
8899  */
8900  if ((qType > 0) && !wordMatch) {
8901  if ((qType > 4) || (qType < 0)) {
8902  LOG_FATAL("Unknown string-search kludge %d", qType)
8903  Bail(-__LINE__);
8904  }
8905  /*
8906  * Special filter #1: over-write matched text with commas -- this choice is
8907  * significant because doctorBuffer() ensures 'stripped' text has no commas
8908  */
8909  if (qType == 1) { /* destroy text-match */
8910  cp = sp->buf+seo;
8911  ptr = sp->buf+sso;
8912  ltsr[index] = 0; /* reset search cache */
8913  while (ptr <= cp) {
8914  *ptr++ = ',';
8915  }
8916 #ifdef DEBUG
8917  if (lDiags) {
8918  printf("Now, buf %p contains:\n%s\n",
8919  sp->buf, (char *)sp->buf);
8920  }
8921 #endif /* DEBUG */
8922  /*
8923  * Special filter #2: various checks to make sure LGPL/GFDL/GPL license
8924  * references are not confused -- they CAN look quite similar. Specifically
8925  * we don't want to confuse a SINGLE reference to the LGPL as a reference to
8926  * the GPL. BUT -- sometimes references to BOTH are in the same file.
8927  */
8928  }
8929  if ((qType == 2) &&
8930  HASREGEX(_TEXT_LGPL_NOT_GPL, sp->buf+sso) &&
8931  !HASREGEX(_TEXT_GPL_NOT_LGPL, sp->buf+sso) &&
8932  NOT_INFILE(_TEXT_LGPL_DETAILS) &&
8933  NOT_INFILE(_TEXT_LICSET)) {
8934  if (lDiags) {
8935  printf("... \"GPL\" -> LGPL (%d)\n",
8936  index);
8937  }
8938  ltsr[_TEXT_LGPL_NOT_GPL] = LTSR_YES;
8939  ret = 0;
8940  *q = LTSR_NO; /* oops, make that a "no" */
8941  } else if ((qType == 2) &&
8942  HASREGEX(_TEXT_GFDL_NOT_GPL, sp->buf+sso)) {
8943  if (lDiags) {
8944  printf("... \"GPL\" -> GFDL (%d)\n",
8945  index);
8946  }
8947  ltsr[_TEXT_GFDL_NOT_GPL] = LTSR_YES;
8948  ret = 0;
8949  *q = LTSR_NO;
8950  } else if ((index == _LT_GPL3ref) && (qType == 2)) {
8951  if (HASREGEX(_PHR_QEMU_NOT_GPLV3, sp->buf+sso)) {
8952  if (lDiags) {
8953  printf("... \"GPL\" -> QEMU\n");
8954  }
8955  ltsr[_PHR_QEMU_NOT_GPLV3] = LTSR_YES;
8956  ret = 0;
8957  *q = LTSR_NO;
8958  } else if (INFILE(_PHR_SCF_HOWTO)) {
8959  if (lDiags) {
8960  printf("... SCF-Howto\n");
8961  }
8962  ret = 0;
8963  *q = LTSR_NO;
8964  } else if (HASREGEX(_TEXT_DRBD_NOT_GPL3, sp->buf)) {
8965  if (lDiags) {
8966  printf("... mysgl/DRBD\n");
8967  }
8968  ltsr[_TEXT_DRBD_NOT_GPL3] = LTSR_YES;
8969  ret = 0;
8970  *q = LTSR_NO;
8971  }
8972 #ifdef GPLV2_BEATS_GPLV3
8973  else if (strNbuf(sp->buf+sso, "version 2")) {
8974  if (sp->buf + sso + cur.regm.rm_eo <
8975  sp->buf + seo) {
8976  if (lDiags) {
8977  printf("... v%c!\n", *cp);
8978  }
8979  ret = 0;
8980  *q = LTSR_NO;
8981  }
8982  }
8983 #endif /* GPLV2_BEATS_GPLV3 */
8984  } else if ((index == _PHR_GPL3_OR_LATER) &&
8985  (qType == 2) &&
8986  strNbuf(sp->buf+sso, "v2 ")) {
8987  if (lDiags) {
8988  printf("... v2 and version 3\"\n");
8989  }
8990  ret = 0;
8991  *q = LTSR_NO;
8992  } else if ((index == _PHR_GPL3_OR_LATER) &&
8993  (qType == 2) &&
8994  HASREGEX(_TEXT_NOT_GPLV3_DRAFT, sp->buf+sso)) {
8995  if (lDiags) {
8996  printf("... exclude \"GPLv3 draft\"\n");
8997  }
8998  ltsr[_TEXT_NOT_GPLV3_DRAFT] = LTSR_YES;
8999  ret = 0;
9000  *q = LTSR_NO;
9001  } else if ((index == _PHR_GPL3_ONLY) &&
9002  (qType == 2) &&
9003  HASREGEX(_TEXT_NOT_LIBSTDC, sp->buf+sso)) {
9004  if (lDiags) {
9005  printf("... exclude libstdc vers\"\n");
9006  }
9007  ltsr[_TEXT_NOT_LIBSTDC] = LTSR_YES;
9008  ret = 0;
9009  *q = LTSR_NO;
9010  }
9011  /*
9012  * POSIX regex matches the longest string possible, and a '3' can follow a
9013  * "version 2 or later phrase" -- we want to match the '2'. "Vim" has this:
9014  *****
9015  * e) When the GNU General Public License (GPL) applies to the changes,
9016  * you may distribute the modified code under the GNU GPL version 2 or
9017  * any later version.
9018  * 3) A message must be added, at least in the output of the ":version"
9019  * command and in the intro screen, such that the user ...
9020  *****
9021  * So... if there's a NUMBER (!= '3') between the word "version" and the
9022  * end-of-match (at sp->buf+seo), that matches the number AND NOT the 3.
9023  */
9024  else if ((qType == 2) &&
9025  ((index == _PHR_GPL3_ONLY) || (index == _PHR_LGPL3_ONLY))) {
9026  if (strNbuf(sp->buf+sso, "version") ||
9027  strNbuf(sp->buf+sso, "v3")) {
9028  cp = sp->buf + cur.regm.rm_eo;
9029  } else {
9030  cp = sp->buf + seo; /* "nil" loop */
9031  }
9032  for (ptr = sp->buf+seo; cp < ptr; cp++) {
9033  if (isdigit(*cp) && *cp != '3') {
9034  if (lDiags) {
9035  printf("... vers %c!\n",
9036  *cp);
9037  }
9038  ret = 0;
9039  *q = LTSR_NO;
9040  break;
9041  }
9042  }
9043  } else if (index == _PHR_FSF_V3_ONLY && qType == 2) {
9044  if (strNbuf(sp->buf+sso, "version")) {
9045 #ifdef GPLV2_BEATS_GPLV3
9046  ptr = sp->buf + sso + cur.regm.rm_so + 7;
9047 #endif /* GPLV2_BEATS_GPLV3 */
9048  cp = strchr(sp->buf+sso, '3');
9049  if (strncasecmp(cp, "3 tlb", 5) == 0) {
9050  if (lDiags) {
9051  printf("... v3 tlb\n");
9052  }
9053  ret = 0;
9054  *q = LTSR_NO;
9055  }
9056 #ifdef GPLV2_BEATS_GPLV3
9057  else if ((*ptr == ' ') && (*(ptr+1) == '2')) {
9058  if (lDiags) {
9059  printf("... v2, !v3\n");
9060  }
9061  ret = 0;
9062  *q = LTSR_NO;
9063  }
9064 #endif /* GPLV2_BEATS_GPLV3 */
9065  }
9066  else if (strNbuf(sp->buf+sso, "v3")) {
9067  cp = sp->buf + sso + cur.regm.rm_so;
9068  if (strncasecmp(cp-4, "arm ", 4) == 0) {
9069  if (lDiags) {
9070  printf("... arm v3\n");
9071  }
9072  ret = 0;
9073  *q = LTSR_NO;
9074  } else if (strncasecmp(cp, "v3020 ",
9075  6) == 0) {
9076  if (lDiags) {
9077  printf("... v3020\n");
9078  }
9079  ret = 0;
9080  *q = LTSR_NO;
9081  }
9082  }
9083  } else if ((index == _LT_LGPL_OR) &&
9084  (strncasecmp(sp->buf+sso, "or fitness f", 12) == 0)) {
9085  if (lDiags) {
9086  printf("... merch-or-fitness\n");
9087  }
9088  ret = 0;
9089  *q = LTSR_NO;
9090  } else if ((index == _LT_GPLref1) &&
9091  (qType == 2) &&
9092  INFILE(_PHR_LIC_CHANGE)) {
9093  if (lDiags) {
9094  printf("... exclude lic-change\"\n");
9095  }
9096  ret = 0;
9097  *q = LTSR_NO;
9098  } else if ((qType == 2) && (sso > 4)) {
9099  cp = sp->buf+sso-4;
9100  if (strncasecmp(cp, "not ", 4) == 0) {
9101  if (lDiags) {
9102  printf("... NOT l?gpl-ish\n");
9103  }
9104  ret = 0;
9105  *q = LTSR_NO; /* "no" */
9106  }
9107  } else if (qType == 3 && INFILE(_PHR_ARTISTIC_DESC1)) {
9108  /*
9109  Special filter #3: match specific versions of Perl
9110  references, but not all
9111  */
9112  if (lDiags) {
9113  printf("... exclude artistic defn\"\n");
9114  }
9115  ret = 0;
9116  *q = LTSR_NO;
9117  } else if (qType == 4) {
9118  /*
9119  Special filter #4: look for a numerical version
9120  number IFF NOT IN a string of (at least) 4 numerical
9121  characters (signifying a year/datestamp)
9122  */
9123  char *x;
9124  x = cp = cur.matchBase + sso;
9125  ptr = cp - (sso < 100 ? sso : 100);
9126  while (!isdigit(*cp)) {
9127  cp++;
9128  }
9129  if (isdigit(*(cp+1)) && isdigit(*(cp+2)) && isdigit(*(cp+3))) {
9130  if (lDiags) {
9131  printf("... don't want year\n");
9132  }
9133  ret = 0;
9134  *q = LTSR_NO;
9135  } else if (HASREGEX(_TEXT_GNU_HELLO_23, ptr)) {
9136  if (lDiags) {
9137  printf("... gnu example\n");
9138  }
9139  ret = 0;
9140  *q = LTSR_NO;
9141  }
9142 #ifdef GPLV2_BEATS_GPLV3
9143  else if (strncasecmp(x-5, "v2 or ", 5) == 0) {
9144  if (lDiags) {
9145  printf("... v2 or v3\n");
9146  }
9147  ret = 0;
9148  *q = LTSR_NO;
9149  }
9150 #endif /* GPLV2_BEATS_GPLV3 */
9151  /*
9152  * Special case - don't know where better to look for this... other strings
9153  * match TEXT_GPLV3 and should be filtered. This should be a fairly low
9154  * frequency check.
9155  */
9156  else if (index == _TEXT_GPLV3) {
9157  x = cur.matchBase + seo;
9158  if (isdigit(*x) && *x != '0') {
9159  if (lDiags) {
9160  printf("... v3#!0\n");
9161  }
9162  ret = 0;
9163  *q = LTSR_NO;
9164  }
9165  }
9166  }
9167  }
9168 #if (DEBUG > 5)
9169  printf(">>===> \"%s\"\n", ltp->regex);
9170 #endif /* DEBUG > 5 */
9171  }
9172 #ifdef PARSE_STOPWATCH
9173  END_TIMER; /* stop the timer */
9174  (void) sprintf(timerName, "findPhrase(%03d): RET=%d (%s:%d)", index,
9175  ret, ltp->tseed, strlen(sp->buf));
9176  PRINT_TIMER(timerName, 0);
9177 #endif /* PARSE_STOPWATCH */
9178  if (lDiags && ret) {
9179  printRegexMatch(index, NO);
9180  /* locateRegex(filetext, op, index, size, sso, seo); */
9181  }
9182  return(ret);
9183 }
9184 
9199 void locateRegex(char *text, item_t *op, int index, int size, int sso, int seo)
9200 {
9201  int i;
9202  int j;
9203  int n;
9204  int off;
9205  int len;
9206  item_t *sp;
9207  list_t *lp = (list_t *)op->bList;
9208  char *cp;
9209  char *ptr;
9210  char *start;
9211  char save;
9212 
9213 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
9214  traceFunc("== locateRegex(%p, %p, %d, %d, %d, %d)\n", text, op, index,
9215  size, sso, seo);
9216 #endif /* PROC_TRACE || PHRASE_DEBUG */
9217 
9218  /*
9219  * First step, simplest case - try to locate the regex in the file. It
9220  * *might* be that easy (but not very often, it turns out).
9221  */
9222  if (idxGrep(index, text, REG_ICASE|REG_EXTENDED)) {
9223  saveRegexLocation(index, cur.regm.rm_so,
9224  cur.regm.rm_eo - cur.regm.rm_so, YES);
9225  return;
9226  }
9227  /*
9228  * Regex is not directly in the raw text file, so now we need to try to
9229  * map a location from a 'doctored buffer' to a location in the original
9230  * text file. Not impossible, yet not overly straight-forward.
9231  */
9232 #ifdef DEBUG
9233  listDump(lp, NO);
9234  printf("Doc-buffer match @ %d:%d\n", sso, seo);
9235  printf("Possible \"%s\" entries to search: %d (%d)\n", op->str,
9236  op->nMatch, lp->used);
9237  for (n = i = 0; (sp=listIterate(lp)); i++) {
9238  printf("Ent[%d]: bDocLen %d (len %d) == file %d+%d (%d)\n",
9239  i, sp->bDocLen, (sp->bDocLen)-n, sp->bStart, sp->bLen,
9240  sp->bStart+sp->bLen);
9241  n = sp->bDocLen;
9242  }
9243 #endif /* DEBUG */
9244  /*
9245  * At this point, the matched phrase should be bounded by {sso} and {seo}
9246  * as offsets within the doctored buffer we're scanning. We also have a
9247  * mapping of offsets within the doctored buffer to more-or-less where it
9248  * exists in the original (raw text) file -- so go find it. Walk through the
9249  * offsets-list; the entry with the LOWEST end-of-doctored-buffer offset
9250  * exceeding the value of 'sso' IS the paragraph where we found the regex.
9251  */
9252  i = -1;
9253  j = -1;
9254  n = 0;
9255  while ((sp = listIterate(lp))) {
9256  if (sso > sp->bDocLen) {
9257  n = sp->bDocLen;
9258  continue;
9259  }
9260  i = sp->bStart;
9261  j = sp->bLen;
9262 #ifdef DEBUG
9263  printf("sso(%d), limit(%d), Possible: @%d+%d\n", sso,
9264  sp->bDocLen, i, j);
9265 #endif /* DEBUG */
9266  listIterationReset(lp);
9267  break;
9268  }
9269  if (i < 0) { /* something is wrong... */
9270  LOG_FATAL("Cannot map reduced-text to raw file contents (#%d)", index)
9271  Bail(-__LINE__);
9272  }
9273  /*
9274  * Remember, the length of text matched in the doctored-buffer will likely
9275  * not match the length of the "same" (unmodified) text in the raw file!
9276  * And, an offset within the doctored buffer CANNOT be any larger than the
9277  * corresponding text segment in the raw file (we only _remove_ characters).
9278  * Next, find the last occurrence (in the raw file) of the last word in
9279  * the license-footprint
9280  */
9281  sso -= n;
9282  seo -= n;
9283  off = i + sso;
9284  len = j - sso;
9285 #ifdef DEBUG
9286  printf("WINDOW-first: offset %d, len %d\n", off, len);
9287 #endif /* DEBUG */
9288  /*printf("BUF: %s\n", sp->buf);*/
9289  start = _REGEX(index);
9290  cp = start + licSpec[index].text.csLen - 1; /* 'end' of regex */
9291 #ifdef DEBUG
9292  printf("EO-Regex, cp == '%c'\n", *cp);
9293 #endif /* DEBUG */
9294  n = 0;
9295  while (*cp == ' ') {
9296  cp--;
9297  }
9298  while ((n == 1) || ((cp != start) && (*cp != ' ') && (*cp != ')') &&
9299  (*cp != '}'))) {
9300  if (*cp == ']') {
9301  n = 1;
9302  } else if (*cp == '[') {
9303  n = 0;
9304  }
9305  if (cp == _REGEX(index)) {
9306  cp = ":no:match";
9307  break;
9308  }
9309  cp--;
9310  }
9311  if (*cp == ')') {
9312  cp--;
9313  n = 1;
9314  while (n) {
9315  if (*cp == '(') {
9316  n--;
9317  } else if (*cp == ')') {
9318  n++;
9319  }
9320  /*printf("'%c' -- n %d\n", *cp, n);*/
9321  if (cp != start) {
9322  cp--;
9323  }
9324  }
9325  while ((cp != start) && (*cp != ' ') && (*cp != '.') && (*cp != ')')
9326  && (*cp != ']') && (*cp != '}')) {
9327  /*printf("skip '%c'...\n", *cp);*/
9328  cp--;
9329  }
9330 #ifdef DEBUG
9331  printf("_END_@%ld '%c'\n", cp-_REGEX(index), *cp);
9332 #endif /* DEBUG */
9333  }
9334  if (cp != start) {
9335  if (*cp != '.') {
9336  cp++;
9337  }
9338  if ((*cp == '?') || (*cp == '+')) {
9339  cp++;
9340  }
9341  }
9342  ptr = sp->buf + sso;
9343  i = j = 0;
9344 #ifdef DEBUG
9345  printf("SEARCH @foot is now \"%s\"\n", cp);
9346 #endif /* DEBUG */
9347  while (strGrep(cp, ptr, REG_ICASE|REG_EXTENDED)) {
9348  i++;
9349  ptr += cur.regm.rm_eo;
9350  j += cur.regm.rm_eo;
9351 #ifdef DEBUG
9352  printf("Found match (%d bytes) @ offset %d (%d tot)\n",
9353  cur.regm.rm_eo - cur.regm.rm_so, cur.regm.rm_so, j);
9354 #endif /* DEBUG */
9355  }
9356 #ifdef DEBUG
9357  printf("Total # of matches == %d\n", i);
9358 #endif /* DEBUG */
9359  if (i && j) {
9360  len = j;
9361 #ifdef DEBUG
9362  printf("WINDOW-adjst: offset %d, len %d\n", off, len);
9363 #endif /* DEBUG */
9364  } else {
9365  Assert(NO, "Regex \"%s\" (foot-end) not in raw text", cp);
9366  }
9367  /*
9368  * Then, find the first occurrence (in the raw file) of the first word
9369  * in the license-footprint; the exception here is that if the "last word"
9370  * turned out to be the entire regex, then the "first word" will be, too.
9371  */
9372  if (cp != start) {
9373  cp = _REGEX(index);
9374  j = 1;
9375 #ifdef DEBUG
9376  printf("BO-Regex, cp == '%c'\n", *cp);
9377 #endif /* DEBUG */
9378  while (*cp == ' ') {
9379  cp++;
9380  }
9381  while (*cp && (*cp != ' ') && (*cp != '.') && (*cp != '(') &&
9382  (*cp != '{')) {
9383  if (*cp == '[') {
9384  if (*(cp + 1) == '^') {
9385  j = 0;
9386  }
9387  while (*cp && (*cp != ']')) {
9388  cp++;
9389  }
9390  if (*(cp+1) && (*(cp+1) == '?')) {
9391  cp++;
9392  }
9393  if (j) {
9394  cp++;
9395  break;
9396  }
9397  }
9398  cp++;
9399  }
9400  if (*cp == '(') {
9401  /*printf("Start@%d '%c'\n", cp-_REGEX(index), *cp);*/
9402  for (n = 1, cp++; n; cp++) {
9403  /*printf("... '%c'\n", *cp);*/
9404  if ((*cp == '(') && (*(cp-1) != '\\')) {
9405  n++;
9406  } else if ((*cp == ')') && (*(cp-1) != '\\')) {
9407  n--;
9408  }
9409  }
9410  while (*cp && (*cp != ' ') && (*cp != '.') && (*cp != '(') &&
9411  (*cp != '[')) {
9412  cp++;
9413  }
9414  /*printf("_END_@%d '%c'\n", cp-_REGEX(index), *cp);*/
9415  }
9416  if ((*cp == '?') ||
9417  (*cp == '+') ||
9418  ((*cp == '.') && (*(cp-1) == '\\'))) {
9419  cp++;
9420  }
9421  if (*cp) {
9422  save = *cp;
9423  *cp = NULL_CHAR;
9424 #ifdef DEBUG
9425  printf("SEARCH @head is now \"%s\"\n", _REGEX(index));
9426 #endif /* DEBUG */
9427  ptr = sp->buf+sso;
9428  if (strGrep(_REGEX(index), ptr,
9429  REG_ICASE|REG_EXTENDED)) {
9430  len -= cur.regm.rm_so;
9431  off += cur.regm.rm_so;
9432  } else {
9433  LOG_NOTICE("Regex \"%s\" (foot-start) not in raw text", _REGEX(index));
9434  }
9435  *cp = save; /* restore to original text */
9436  }
9437 #ifdef DEBUG
9438  else {
9439  LOG_NOTICE("Nothing to trim from the front (*cp == NULL)");
9440  }
9441 #endif /* DEBUG */
9442  }
9443 #ifdef DEBUG
9444  else {
9445  printf("Hey, last-word IS the entire regex!\n");
9446  }
9447 #endif /* DEBUG */
9448  saveRegexLocation(index, off, len, YES);
9449 #ifdef DEBUG
9450  printf("WINDOW-FINAL: offset %d, len %d\n", off, len);
9451 #endif /* DEBUG */
9452  /*
9453  * At this point, the window is as small as we can (reasonably) make it,
9454  * given that we mundged the original file-text and didn't make a complete
9455  * map of every character. The variable off contains the start of the
9456  * window (the absolute offset within the raw file) and the variable len
9457  * contains the length of the text window.
9458  *****
9459  * DON'T FORGET that some license-footprints are determined merely by
9460  * searching for a string in the raw-text file (calling idxGrep()), e.g.,
9461  * not using the doctored buffers. See fileHasPatt() for details.
9462  *****
9463  * And finally, note how the list of entries matched (in 'whereList') is
9464  * manipulated -- see the very bottom of "addRef()".
9465  */
9466  if ((off + len) > size) {
9467  LOG_FATAL("off %d + len %d (== %d) exceeds filesize %d!", off, len, off + len, size);
9468  Bail(-__LINE__);
9469  }
9470  return;
9471 }
9472 
9480 void saveRegexLocation(int index, int offset, int length, int saveCache)
9481 {
9482  item_t *ip;
9483  item_t *sp;
9484 
9485 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
9486  traceFunc("== saveRegexLocation(%d, %d, %d, %d)\n", index, offset, length,
9487  saveCache);
9488 #endif /* PROC_TRACE || PHRASE_DEBUG */
9489 
9490  (void) sprintf(name, "reg%04d", index);
9491  sp = listGetItem(&whereList, name);
9492  sp->bIndex = whereList.used;
9493  sp->bStart = offset;
9494  sp->bLen = length;
9495  if (saveCache) {
9496  ip = listGetItem(&whCacheList, name);
9497  ip->bIndex = index;
9498  ip->bStart = offset;
9499  ip->bLen = length;
9500  }
9501  return;
9502 }
9503 
9504 
9505 void saveUnclBufLocation(int bufNum)
9506 {
9507  item_t *p;
9508  item_t *bp;
9509  list_t *lp;
9510 
9511 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
9512  traceFunc("== saveUnclBufLocation(%d, %d, %d, %d)\n", bufNum);
9513 #endif /* PROC_TRACE || PHRASE_DEBUG */
9514 
9515  listClear(&whereList, NO); /* empty all prior matches */
9516  p = listGetItem(&cur.offList, _REGEX(_LEGAL_first));
9517  lp = (list_t *) p->bList;
9518  (void) sprintf(name, "buf%05d", bufNum);
9519  p = listGetItem(lp, name);
9520  bp = listGetItem(&whereList, LS_UNCL);
9521  bp->bStart = p->bStart;
9522  bp->bLen = p->bLen;
9523  bp->bIndex = -1;
9524  return;
9525 }
9526 
9532 void addRef(char *str, int interest)
9533 {
9534  item_t *p;
9535  char *bp;
9536  char *sp = str;
9537  if(!(str && str[0]))
9538  return;
9539 
9540 #ifdef PROC_TRACE
9541  traceFunc("== addRef(\"%s\", %d)\n", str, interest);
9542 #endif /* PROC_TRACE */
9543 
9544 #if defined(DEBUG)
9545  listDump(&whereList, YES);
9546 #endif /* DEBUG */
9547  /*
9548  * Add this to the list of individual pieces found, and mark the license
9549  * to make generating a license-summary easier. The general strategy is
9550  * to COMPLETELY ignore anything NOT considered 'noteworthy'. So if the
9551  * license is noteworthy, we add one to the count, so that we can call
9552  * listCount() on the list to find if there's a 'real license' in here.
9553  * see makeLicenseSummary() in license.c for more details.
9554  *****
9555  * This little trick is also used in distroReport() and rawSourceReport(),
9556  * see report.c
9557  */
9558  if (str == NULL_STR) {
9559  Assert(YES, "license detected != NULL");
9560  }
9561  if (*str == NULL_CHAR) {
9562  Assert(YES, "license string not start with NULL");
9563  }
9564  bp = licStr+refOffset;
9565  *bp++ = ',';
9566  /*
9567  CDB - Opportunity for optimization via memcpy
9568  */
9569  while (*sp) {
9570  *bp++ = *sp++;
9571  }
9572  *bp = NULL_CHAR;
9573  refOffset = bp - licStr;
9574  /*
9575  * Stuff this license in to several lists:
9576  * - parseList is used to create a package "computed license summary"
9577  * - briefList is used to compute a "terse/brief" license summary
9578  */
9579  p = listGetItem(&cur.parseList, str);
9580  if (interest) {
9581  p->iFlag++;
9582  if (interest > IL_LOW) {
9583  p->iLevel = interest;
9584  }
9585  }
9586  if (interest > maxInterest) {
9587  maxInterest = interest;
9588  }
9589  if (lDiags && whereList.used) {
9590  int i = 0;
9591  listSort(&whereList, SORT_BY_COUNT_ASC);
9592  printf("WINDOW for \"%s\": ", str);
9593  while ((p = listIterate(&whereList))) {
9594  if (i++ > 0) {
9595  printf(", ");
9596  }
9597  printf("%d+%d", p->bStart, p->bLen);
9598  }
9599  printf("\n");
9600  }
9601  listClear(&whereList, NO);
9602 #ifdef DEBUG
9603  if (lDiags) {
9604  printf("++ \"%s\" [int=%d]\n", str, interest);
9605  }
9606 #endif /* DEBUG */
9607 
9608  addLicence(cur.theMatches,str);
9609 
9610  return;
9611 }
9612 
9618 int famOPENLDAP(char *filetext, int size, int isML, int isPS)
9619 {
9620  int ret = 0;
9621 
9622  if (lmem[_tOPENLDAP]) {
9623  if (INFILE(_TITLE_OPENLDAP25)) {
9624  INTERESTING("OLDAP-2.5");
9625  ret = 1;
9626  }
9627  else if (INFILE(_TITLE_OPENLDAP26)) {
9628  INTERESTING("OLDAP-2.6");
9629  ret = 1;
9630  }
9631  else if (INFILE(_TITLE_OPENLDAP27)) {
9632  INTERESTING("OLDAP-2.7");
9633  ret = 1;
9634  }
9635  else if (INFILE(_TITLE_OPENLDAP28)) {
9636  INTERESTING("OLDAP-2.8");
9637  ret = 1;
9638  }
9639  else if (INFILE(_TITLE_OPENLDAP201)) {
9640  INTERESTING("OLDAP-2.0.1");
9641  ret = 1;
9642  }
9643  else if (INFILE(_TITLE_OPENLDAP20)) {
9644  INTERESTING("OLDAP-2.0");
9645  ret = 1;
9646  }
9647  else if (INFILE(_TITLE_OPENLDAP21)) {
9648  INTERESTING("OLDAP-2.1");
9649  ret = 1;
9650  }
9651  else if (INFILE(_TITLE_OPENLDAP221) || INFILE(_SPDX_OLDAP_221)) {
9652  INTERESTING("OLDAP-2.2.1");
9653  ret = 1;
9654  }
9655  else if (INFILE(_TITLE_OPENLDAP222) || INFILE(_SPDX_OLDAP_222)) {
9656  INTERESTING("OLDAP-2.2.2");
9657  ret = 1;
9658  }
9659  else if (INFILE(_TITLE_OPENLDAP22)) {
9660  INTERESTING("OLDAP-2.2");
9661  ret = 1;
9662  }
9663  else if (INFILE(_TITLE_OPENLDAP11)) {
9664  INTERESTING("OLDAP-1.1");
9665  ret = 1;
9666  }
9667  else if (INFILE(_TITLE_OPENLDAP23)) {
9668  INTERESTING("OLDAP-2.3");
9669  ret = 1;
9670  }
9671  else if (INFILE(_TITLE_OPENLDAP24)) {
9672  INTERESTING("OLDAP-2.4");
9673  ret = 1;
9674  }
9675  else if (INFILE(_TITLE_OPENLDAP12)) {
9676  INTERESTING("OLDAP-1.2");
9677  ret = 1;
9678  }
9679  else if (INFILE(_TITLE_OPENLDAP13)) {
9680  INTERESTING("OLDAP-1.3");
9681  ret = 1;
9682  }
9683  else if (INFILE(_TITLE_OPENLDAP14)) {
9684  INTERESTING("OLDAP-1.4");
9685  ret = 1;
9686  }
9687  else if (INFILE(_CR_OPENLDAP) && INFILE(_TITLE_OPENLDAP)) {
9688  INTERESTING("OLDAP");
9689  ret = 1;
9690  }
9691  }
9692  lmem[_fOPENLDAP] = ret;
9693  return(ret);
9694 }
9695 
9696 
9720 int checkUnclassified(char *filetext, int size, int score,
9721  int isML, int isPS, int nw)
9722 {
9723  char *buf;
9724  char *curptr;
9725  char *cp;
9726  int m = 0;
9727 #ifdef UNKNOWN_CHECK_DEBUG
9728  int pNum = 0;
9729 #endif /* UNKNOWN_CHECK_DEBUG */
9730  int i = 0;
9731 
9732 #ifdef PROC_TRACE
9733  traceFunc("== checkUnclassified(%p, %d, %d, %d, %d, %d)\n", filetext,
9734  size, score, isML, isPS, nw);
9735 #endif /* PROC_TRACE */
9736 
9737  /*
9738  * Based on experience, this is a good place to look for false-positives:
9739  *****
9740  * Occasionally IETF documents (RFCs, technical descriptions and the like)
9741  * have enough text to trip the unclassified-license detector falsely.
9742  * As a first quick check, see if there's an IETF copyright in the file
9743  * and if so, avoid this (somewhat expensive) check.
9744  *****
9745  * The "Debian social contract" has some very legal-looking verbage, too.
9746  */
9747  if (mCR_IETF()) {
9748  return(0);
9749  }
9750  if (INFILE(_LT_DEB_CONTRACT) || INFILE(_LT_DEB_CONTRACTref)){
9751  INTERESTING("Debian-social-DFSG");
9752  return(0);
9753  }
9754  if (INFILE(_LT_TROLLTECH)) {
9755  return(1);
9756  }
9757 
9758  /*
9759  * A Generic EULA 'qualifies' as an UnclassifiedLicense, or the clause 'License agreement' as an UnclassifiedLicense, check this
9760  * one before trying the word-matching magic checks (below).
9761  */
9762  gl.flags |= FL_SAVEBASE; /* save match buffer (if any) */
9763  m = INFILE(_LT_GEN_EULA) || INFILE(_LT_LG) || INFILE(_LT_GENERIC_UNCLASSIFIED);
9764  /* gl.flags & ~FL_SAVEBASE; CDB -- This makes no sense, given line above */
9765  if (m) {
9766  if (cur.licPara == NULL_STR && cur.matchBase) {
9767  saveLicenseParagraph(cur.matchBase, isML, isPS, NO);
9768  }
9769  return(1);
9770  }
9771  checknw = nw;
9772  /*
9773  * Look for paragraphs of text that could be licenses. We'll check the
9774  * resulting text for 4 types of different words (all in proximity leads
9775  * us to believe it's a license of some sort). If we don't get a paragraph
9776  * to search based on the first set of words, look no further.
9777  */
9778 #ifdef UNKNOWN_CHECK_DEBUG
9779  printf("... first regex: \"%s\"\n", _REGEX(_LEGAL_first));
9780 #endif /* UNKNOWN_CHECK_DEBUG */
9781  if ((buf = getInstances(filetext, size, gl.uPsize, gl.uPsize,
9782  _REGEX(_LEGAL_first), YES)) == NULL_STR) {
9783 #ifdef UNKNOWN_CHECK_DEBUG
9784  printf("... getInstances returns NULL\n");
9785 #endif /* UNKNOWN_CHECK_DEBUG */
9786  return(0);
9787  }
9788  if (lDiags) {
9789  printRegexMatch(_LEGAL_first, NO);
9790  }
9791  /*
9792  * Without examining each paragraph, make sure the file contains the
9793  * components we're looking for... if not, don't check any further.
9794  */
9795  if (/*size > 102400 && */
9796  !match3(_LEGAL_first, buf, score, NO, isML, isPS)) {
9797 #ifdef UNKNOWN_CHECK_DEBUG
9798  printf("... first check fails\n");
9799 #endif /* UNKNOWN_CHECK_DEBUG */
9800  return(0);
9801  }
9802  /*
9803  * buf now points to a series of paragraphs that have 6 lines above
9804  * AND below the regex we've matched, PLUS a separator line between
9805  * each paragraph. The LAST paragraph doesn't have a separator-line.
9806  *****
9807  * For the sake of the search, make the separator line 'disappear'.
9808  */
9809  curptr = buf;
9810  while (idxGrep(_UTIL_XYZZY, curptr, 0)) {
9811  cp = curptr + cur.regm.rm_so;
9812  *cp = NULL_CHAR;
9813 #ifdef UNKNOWN_CHECK_DEBUG
9814  printf("DEBUG: paragraph #%d:\n[START-PARA]\n%s\n[END-PARA]\n",
9815  ++pNum, curptr);
9816 #endif /* UNKNOWN_CHECK_DEBUG */
9817  i++;
9818  /*
9819  * Now that we have our 'paragraph span', check the contents of the
9820  * paragraph for the other 3 groups of words. A match in EACH group
9821  * (plus other criteria checked, of course) means we've likely found
9822  * as-of-yet unclassified license.
9823  *****
9824  * A generic "no warranty" paragraph also looks like a license, so in
9825  * that case don't return a false positive.
9826  */
9827  if (match3(_LEGAL_first, curptr, score, YES, isML, isPS)) {
9828  saveUnclBufLocation(i);
9829  return(1);
9830  }
9831 #ifdef UNKNOWN_CHECK_DEBUG
9832  else {
9833  printf("DEBUG: match() returns 0, look again\n");
9834  }
9835 #endif /* UNKNOWN_CHECK_DEBUG */
9836  /*
9837  * NO-match means this paragraph doesn't contain the magic words we
9838  * seek. However, this file still _may_ contain the magic paragraph --
9839  * it'll be searched in this while-loop until either the magic OR
9840  * end-of-file is found)...
9841  */
9842  *cp++ = '='; /* reset line */
9843  if ((cp = findEol(cp)) == NULL_STR) {
9844  LOG_FATAL("Cannot find delimeter!")
9845  Bail(-__LINE__);
9846  }
9847  curptr = cp+1;
9848  }
9849  /*
9850  * One last buffer to try...
9851  */
9852 #ifdef UNKNOWN_CHECK_DEBUG
9853  printf("DEBUG: %s paragraph (#%d):\n[START-PARA]\n%s\n[END-PARA]\n",
9854  pNum == 0 ? "ONLY" : "LAST", ++pNum, curptr);
9855 #endif /* UNKNOWN_CHECK_DEBUG */
9856  if (match3(_LEGAL_first, curptr, score, YES, isML, isPS)) {
9857  saveUnclBufLocation(++i);
9858  return(1);
9859  }
9860  return(0);
9861 }
9862 
9863 
9867 void checkFileReferences(char *filetext, int size, int score, int kwbm,
9868  int isML, int isPS)
9869 {
9870  int i;
9871 
9872 #ifdef PROC_TRACE
9873  traceFunc("== checkFileReferences(%p, %d, %d, 0x%x, %d, %d)\n", filetext,
9874  size, score, kwbm, isML, isPS);
9875 #endif /* PROC_TRACE */
9876  for (i = 0; i < NSEECOPYING; i++) {
9877  if (INFILE(_SEECOPYING_first+i)) {
9878  if (lDebug) {
9879  (void) sprintf(name, "Gen-CPY-%d", ++i);
9880  INTERESTING(name);
9881  } else {
9882  INTERESTING("See-file.COPYING");
9883  }
9884  return;
9885  }
9886  }
9887  /* */
9888  for (i = 0; i < NSEELICENSE; i++) {
9889  if (INFILE(_SEELICENSE_first+i)) {
9890  if (lDebug) {
9891  (void) sprintf(name, "Gen-CPY-%d", ++i);
9892  INTERESTING(name);
9893  } else {
9894  INTERESTING("See-file.LICENSE");
9895  }
9896  return;
9897  }
9898  }
9899  /* */
9900  for (i = 0; i < NSEEREADME; i++) {
9901  if (INFILE(_SEEREADME_first+i)) {
9902  if (lDebug) {
9903  (void) sprintf(name, "Gen-CPY-%d", ++i);
9904  INTERESTING(name);
9905  } else {
9906  INTERESTING("See-file.README");
9907  }
9908  return;
9909  }
9910  }
9911  /* */
9912  for (i = 0; i < NSEEOTHER; i++) {
9913  if (INFILE(_SEEOTHER_first+i)) {
9914  if (lDebug) {
9915  (void) sprintf(name, "Gen-CPY-%d", ++i);
9916  INTERESTING(name);
9917  } else {
9918  INTERESTING("See-doc.OTHER");
9919  }
9920  return;
9921  }
9922  }
9923  /* */
9924  if (INFILE(_LT_SEE_OUTPUT_1)) {
9925  INTERESTING(lDebug ? "Gen-EXC-1" : "GNU-style.EXECUTE");
9926  }
9927 #if 0
9928  else if (INFILE(_LT_SEE_OUTPUT_2)) {
9929  INTERESTING(lDebug ? "Gen-EXC-2" : "Free-SW.run-COMMAND");
9930  } else if (INFILE(_LT_SEE_OUTPUT_3)) {
9931  INTERESTING(lDebug ? "Gen-EXC-3" : "Free-SW.run-COMMAND");
9932  }
9933 #endif
9934  if(HASTEXT(_LT_SEE_COPYING_LICENSE_1, REG_EXTENDED) || HASTEXT(_LT_SEE_COPYING_LICENSE_2, REG_EXTENDED)) {
9935  INTERESTING("See-file");
9936  }
9937  else if (HASTEXT(_LT_SEE_URL, REG_EXTENDED) || HASTEXT(_LT_SEE_URL_ref1, REG_EXTENDED) || HASTEXT(_LT_SEE_URL_ref2, REG_EXTENDED) || HASTEXT(_LT_SEE_URL_ref3, REG_EXTENDED)) {
9938  INTERESTING("See-URL");
9939  }
9940  return;
9941 
9942 #ifdef OLD_VERSION
9943  if (INFILE(_LT_SEE_COPYING_1)) {
9944  INTERESTING(lDebug ? "Gen-CPY-1" : "See-file.COPYING");
9945  }
9946  else if (INFILE(_LT_SEE_COPYING_2)) {
9947  INTERESTING(lDebug ? "Gen-CPY-2" : "See-file.COPYING");
9948  }
9949  else if (INFILE(_LT_SEE_COPYING_3)) {
9950  INTERESTING(lDebug ? "Gen-CPY-3" : "See-file.COPYING");
9951  }
9952  else if (INFILE(_LT_SEE_COPYING_4)) {
9953  INTERESTING(lDebug ? "Gen-CPY-4" : "See-file.COPYING");
9954  }
9955  else if (INFILE(_LT_SEE_COPYING_5)) {
9956  INTERESTING(lDebug ? "Gen-CPY-5" : "See-file.COPYING");
9957  }
9958  else if (INFILE(_LT_SEE_COPYING_6)) {
9959  INTERESTING(lDebug ? "Gen-CPY-6" : "See-file.COPYING");
9960  }
9961  else if (INFILE(_LT_SEE_COPYING_7)) {
9962  INTERESTING(lDebug ? "Gen-CPY-7" : "See-file.COPYING");
9963  }
9964  else if (INFILE(_LT_SEE_COPYING_8)) {
9965  INTERESTING(lDebug ? "Gen-CPY-8" : "See-file.COPYING");
9966  }
9967  else if (INFILE(_LT_SEE_COPYING_9)) {
9968  INTERESTING(lDebug ? "Gen-CPY-9" : "See-file.COPYING");
9969  }
9970  else if (INFILE(_LT_SEE_COPYING_10)) {
9971  INTERESTING(lDebug ? "Gen-CPY-10" : "See-file.COPYING");
9972  }
9973  else if (INFILE(_LT_SEE_COPYING_LAST1)) {
9974  INTERESTING(lDebug ? "Gen-CPY-L1" : "See-file.COPYING");
9975  }
9976  else if (INFILE(_LT_SEE_COPYING_LAST2)) {
9977  INTERESTING(lDebug ? "Gen-CPY-L2" : "See-file.COPYING");
9978  }
9979  else if (INFILE(_LT_SEE_LICENSE_1)) {
9980  INTERESTING(lDebug ? "Gen-LIC-1" : "See-file.LICENSE");
9981  }
9982  else if (INFILE(_LT_SEE_LICENSE_2)) {
9983  INTERESTING(lDebug ? "Gen-LIC-2" : "See-file.LICENSE");
9984  }
9985  else if (INFILE(_LT_SEE_LICENSE_3)) {
9986  INTERESTING(lDebug ? "Gen-LIC-3" : "See-file.LICENSE");
9987  }
9988  else if (INFILE(_LT_SEE_LICENSE_4)) {
9989  INTERESTING(lDebug ? "Gen-LIC-4" : "See-file.LICENSE");
9990  }
9991  else if (INFILE(_LT_SEE_LICENSE_5)) {
9992  INTERESTING(lDebug ? "Gen-LIC-5" : "See-file.LICENSE");
9993  }
9994  else if (INFILE(_LT_SEE_LICENSE_6)) {
9995  INTERESTING(lDebug ? "Gen-LIC-6" : "See-file.LICENSE");
9996  }
9997  else if (INFILE(_LT_SEE_LICENSE_7)) {
9998  INTERESTING(lDebug ? "Gen-LIC-7" : "See-file.LICENSE");
9999  }
10000  else if (INFILE(_LT_SEE_LICENSE_8)) {
10001  INTERESTING(lDebug ? "Gen-LIC-8" : "See-file.LICENSE");
10002  }
10003  else if (INFILE(_LT_SEE_LICENSE_9)) {
10004  INTERESTING(lDebug ? "Gen-LIC-9" : "See-file.LICENSE");
10005  }
10006  else if (INFILE(_LT_SEE_LICENSE_10)) {
10007  INTERESTING(lDebug ? "Gen-LIC-10" : "See-file.LICENSE");
10008  }
10009  else if (INFILE(_LT_SEE_LICENSE_LAST1)) {
10010  INTERESTING(lDebug ? "Gen-LIC-L1" : "See-file.LICENSE");
10011  }
10012  else if (INFILE(_LT_SEE_LICENSE_LAST2)) {
10013  INTERESTING(lDebug ? "Gen-LIC-L2" : "See-file.LICENSE");
10014  }
10015  else if (INFILE(_LT_SEE_README_1)) {
10016  INTERESTING(lDebug ? "Gen-RDM-1" : "See-file.README");
10017  }
10018  else if (INFILE(_LT_SEE_README_2)) {
10019  INTERESTING(lDebug ? "Gen-RDM-2" : "See-file.README");
10020  }
10021  else if (INFILE(_LT_SEE_README_3)) {
10022  INTERESTING(lDebug ? "Gen-RDM-3" : "See-file.README");
10023  }
10024  else if (INFILE(_LT_SEE_README_4)) {
10025  INTERESTING(lDebug ? "Gen-RDM-4" : "See-file.README");
10026  }
10027  else if (INFILE(_LT_SEE_README_5)) {
10028  INTERESTING(lDebug ? "Gen-RDM-5" : "See-file.README");
10029  }
10030  else if (INFILE(_LT_SEE_README_6)) {
10031  INTERESTING(lDebug ? "Gen-RDM-6" : "See-file.README");
10032  }
10033  else if (INFILE(_LT_SEE_README_7)) {
10034  INTERESTING(lDebug ? "Gen-RDM-7" : "See-file.README");
10035  }
10036  else if (INFILE(_LT_SEE_README_LAST1)) {
10037  INTERESTING(lDebug ? "Gen-RDM-L1" : "See-file.README");
10038  }
10039  else if (INFILE(_LT_SEE_README_LAST2)) {
10040  INTERESTING(lDebug ? "Gen-RDM-L2" : "See-file.README");
10041  }
10042  else if (INFILE(_LT_SEE_OTHER_1)) {
10043  INTERESTING(lDebug ? "Gen-OTH-1" : "See-doc.OTHER");
10044  }
10045  else if (INFILE(_LT_SEE_OTHER_2)) {
10046  INTERESTING(lDebug ? "Gen-OTH-2" : "See-doc.OTHER");
10047  }
10048  else if (INFILE(_LT_SEE_OTHER_3)) {
10049  INTERESTING(lDebug ? "Gen-OTH-3" : "See-doc.OTHER");
10050  }
10051  else if (INFILE(_LT_SEE_OTHER_4)) {
10052  INTERESTING(lDebug ? "Gen-OTH-4" : "See-doc.OTHER");
10053  }
10054  else if (INFILE(_LT_SEE_OTHER_5)) {
10055  INTERESTING(lDebug ? "Gen-OTH-5" : "See-doc.OTHER");
10056  }
10057  else if (INFILE(_LT_SEE_OTHER_6)) {
10058  INTERESTING(lDebug ? "Gen-OTH-6" : "See-doc.OTHER");
10059  }
10060  else if (INFILE(_LT_SEE_OTHER_7)) {
10061  INTERESTING(lDebug ? "Gen-OTH-7" : "See-doc.OTHER");
10062  }
10063  else if (INFILE(_LT_SEE_OTHER_8)) {
10064  INTERESTING(lDebug ? "Gen-OTH-8" : "See-doc.OTHER");
10065  }
10066  else if (INFILE(_LT_SEE_OTHER_9)) {
10067  INTERESTING(lDebug ? "Gen-OTH-9" : "See-doc.OTHER");
10068  }
10069  else if (INFILE(_LT_SEE_OTHER_10)) {
10070  INTERESTING(lDebug ? "Gen-OTH-10" : "See-doc.OTHER");
10071  }
10072  else if (INFILE(_LT_SEE_OTHER_11)) {
10073  INTERESTING(lDebug ? "Gen-OTH-11" : "See-doc.OTHER");
10074  }
10075  else if (INFILE(_LT_SEE_OTHER_12)) {
10076  INTERESTING(lDebug ? "Gen-OTH-12" : "See-doc.OTHER");
10077  }
10078  else if (INFILE(_LT_SEE_OTHER_13)) {
10079  INTERESTING(lDebug ? "Gen-OTH-13" : "See-doc.OTHER");
10080  }
10081  else if (INFILE(_LT_SEE_OTHER_14)) {
10082  INTERESTING(lDebug ? "Gen-OTH-14" : "See-doc.OTHER");
10083  }
10084  else if (INFILE(_LT_SEE_OTHER_15)) {
10085  INTERESTING(lDebug ? "Gen-OTH-15" : "See-doc.OTHER");
10086  }
10087  else if (INFILE(_LT_SEE_OTHER_LAST1)) {
10088  INTERESTING(lDebug ? "Gen-OTH-L1" : "See-doc.OTHER");
10089  }
10090  else if (INFILE(_LT_SEE_OTHER_LAST2)) {
10091  INTERESTING(lDebug ? "Gen-OTH-L2" : "See-doc.OTHER");
10092  }
10093  else if (INFILE(_LT_SEE_OTHER_LAST3)) {
10094  INTERESTING(lDebug ? "Gen-OTH-L3" : "See-doc.OTHER");
10095  }
10096  else if (INFILE(_LT_SEE_OUTPUT_1)) {
10097  INTERESTING(lDebug ? "Gen-EXC-1" : "GNU-style.interactive");
10098  }
10099  return;
10100 #endif /* OLD_VERSION */
10101 }
10102 
10103 
10104 int checkPublicDomain(char *filetext, int size, int score, int kwbm,
10105  int isML, int isPS)
10106 {
10107  int ret;
10108 
10109 #ifdef PROC_TRACE
10110  traceFunc("== checkPublicDomain(%p, %d, %d, 0x%x, %d, %d)\n", filetext,
10111  size, score, kwbm, isML, isPS);
10112 #endif /* PROC_TRACE */
10113 
10114  if (pd >= 0) { /* already tried? */
10115  return(pd);
10116  }
10117  ret = 0; /* default answer is "no" */
10118  if (INFILE(_LT_PUBDOM_CC)) {
10119  INTERESTING(lDebug ? "Pubdom(CC)" : "CC-PDDC");
10120  ret = 1;
10121  } else if (INFILE(_LT_PUBDOM_ODC)) {
10122  INTERESTING(lDebug ? "Pubdom(ODC)" : LS_PD_CLM);
10123  ret = 1;
10124  } else if (INFILE(_LT_PUBDOM_PDD)) {
10125  INTERESTING(lDebug ? "Pubdom(PDD)" : LS_PD_CLM);
10126  ret = 1;
10127  } else if (INFILE(_LT_PUBDOM_USE)) {
10128  INTERESTING(lDebug ? "Pubdom(use)" : LS_PD_CLM);
10129  ret = 1;
10130  } else if (HASTEXT(_LT_PUBDOM_NOTclaim, REG_EXTENDED)) {
10131  INTERESTING(LS_NOT_PD);
10132  ret = 1;
10133  } else if (INFILE(_CR_PUBDOM)) {
10134  if (INFILE(_LT_PUBDOMNOTcpyrt)) {
10135  INTERESTING(LS_PD_CLM);
10136  } else {
10137  INTERESTING(LS_PD_CPRT);
10138  }
10139  ret = 1;
10140  } else if (INFILE(_CR_NONE)) {
10141  INTERESTING(lDebug ? "Pubdom(no-CR)" : LS_PD_CLM);
10142  ret = 1;
10143  } else if (INFILE(_LT_UNLIN) || URL_INFILE(_URL_UNLINref) || URL_INFILE(_URL_UNLIN)) {
10144  INTERESTING("Unlicense");
10145  ret = 1;
10146  } else if (INFILE(_LT_PUBDOM_1)) {
10147  INTERESTING(lDebug ? "Pubdom(1)" : LS_PD_CLM);
10148  ret = 1;
10149  } else if (INFILE(_LT_PUBDOM_2) && NOT_INFILE(_PHR_PUBLIC_FUNCT) && NOT_INFILE(_LT_NOTPUBDOM_1)) {
10150  INTERESTING(lDebug ? "Pubdom(2)" : LS_PD_CLM);
10151  ret = 1;
10152  } else if (INFILE(_LT_PUBDOM_3)) {
10153  INTERESTING(lDebug ? "Pubdom(3)" : LS_PD_CLM);
10154  ret = 1;
10155 #ifdef REMOVED_AS_TOO_BROAD
10156  } else if (INFILE(_LT_PUBDOM_4)) {
10157  INTERESTING(lDebug ? "Pubdom(4)" : LS_PD_CLM);
10158  ret = 1;
10159  } else if (INFILE(_LT_PUBDOM_5)) {
10160  INTERESTING(lDebug ? "Pubdom(5)" : LS_PD_CLM);
10161  ret = 1;
10162  } else if (INFILE(_LT_PUBDOM_6)) {
10163  INTERESTING(lDebug ? "No-more-copyright" : LS_PD_CLM);
10164  ret = 1;
10165 #endif // done removing too broad signatures
10166  } else if (INFILE(_LT_PUBDOM_7)) {
10167  INTERESTING(lDebug ? "Pubdom(7)" : LS_PD_CLM);
10168  ret = 1;
10169  } else if (INFILE(_LT_PUBDOM_8)) {
10170  INTERESTING(lDebug ? "Pubdom(8)" : LS_PD_CLM);
10171  ret = 1;
10172  } else if (INFILE(_LT_PUBDOM_9)) {
10173  INTERESTING(lDebug ? "Pubdom(9)" : LS_PD_CLM);
10174  ret = 1;
10175  } else if (INFILE(_LT_PUBDOM_10)) {
10176  if (INFILE(_LT_blessing)) {
10177  INTERESTING(lDebug ? "Pubdom(10)" : "blessing");
10178  }
10179  else {
10180  INTERESTING(lDebug ? "Pubdom(10)" : LS_PD_CLM);
10181  }
10182  ret = 1;
10183  } else if (INFILE(_URL_PUBDOM)) {
10184  INTERESTING(lDebug ? "Pubdom(URL)" : LS_PD_CLM);
10185  ret = 1;
10186  } else if (HASKW(kwbm, _KW_public_domain) && score <= 3) {
10187  INTERESTING(LS_PD_ONLY);
10188  ret = 1;
10189  }
10190  return(ret);
10191 }
10192 
10193 
10201 void checkCornerCases(char *filetext, int size, int score,
10202  int kwbm, int isML, int isPS, int nw, int force)
10203 {
10204 
10205 #ifdef PROC_TRACE
10206  traceFunc("== checkCornerCases(%p, %d, %d, %d, %d, %d, %d, %d)\n",
10207  filetext, size, score, kwbm, isML, isPS, nw, force);
10208 #endif /* PROC_TRACE */
10209 
10210  if (crCheck++) { /* only need to check this once */
10211  return;
10212  }
10213  if (INFILE(_LT_NOTATT_NOTBSD)) {
10214  LOWINTEREST("non-ATT-BSD");
10215  }
10216 
10217  /*
10218  * FINAL cases: (close to giving up) -- lowest-importance items
10219  */
10226  /*
10227  if (!(*licStr)) {
10228  if (HASTEXT(_TEXT_TRADEMARK, 0)) {
10229  LOWINTEREST(LS_TDMKONLY);
10230  }
10231  }
10232  */
10233  if (!(*licStr)) {
10234  /*
10235  * We may have matched something but ultimately determined there's nothing
10236  * significant or of any interest, so empty the list of any matches we may
10237  * have observed to this point.
10238  */
10239  listClear(&whereList, NO); /* force 'nothing to report' */
10240  }
10241  return;
10242 }
10243 
10244 int match3(int base, char *buf, int score, int save, int isML, int isPS)
10245 {
10246  int i;
10247  int j;
10248  char *cp;
10249  /* */
10250 #ifdef PROC_TRACE
10251 #ifdef PROC_TRACE_SWITCH
10252  if (gl.ptswitch)
10253 #endif /* PROC_TRACE_SWITCH */
10254  printf("== match3(%d, %p, %d, %d, %d, %d)\n", base, buf, score, save,
10255  isML, isPS);
10256 #else /* not PROC_TRACE */
10257 #ifdef UNKNOWN_CHECK_DEBUG
10258  printf("== match3(%d, %p, %d, %d, %d, %d)\n", base, buf, score, save,
10259  isML, isPS);
10260 #endif /* UNKNOWN_CHECK_DEBUG */
10261 #endif /* not PROC_TRACE */
10262  /* */
10263  for (i = 1; i <= 3; i++) {
10264  if (dbgIdxGrep(base+i, buf, (save && lDiags)) == 0) {
10265 #ifdef UNKNOWN_CHECK_DEBUG
10266  printf("match3: FAILED regex (%d)!\n", base+i);
10267 #endif /* UNKNOWN_CHECK_DEBUG */
10268  return(0);
10269  }
10270  }
10271 #ifdef UNKNOWN_CHECK_DEBUG
10272  printf("match3: Success (%s)!\n",
10273  (save ? "buffer-for-real" : "file-initial-check"));
10274 #endif /* UNKNOWN_CHECK_DEBUG */
10275  /*
10276  * Some "possible licenses" are technical descriptions that share some words
10277  * that typically appear in licenses (distribution, terms, permission(s)).
10278  *****
10279  * If we're checking a paragraph (e.g., "save" is non-zero), see if there are
10280  * other engineering-development-technical terms in the paragraph that tend
10281  * to NOT be present in licenses...
10282  */
10283  if (save) {
10284  for (j = i = 0, cp = buf; *cp; i++, cp++) {
10285  if (*cp & 0200) {
10286  j++;
10287  }
10288  }
10289 #ifdef UNKNOWN_CHECK_DEBUG
10290  printf("DEEBUG: %d bytes, %d 8-bit\n", i, j);
10291 #endif /* UNKNOWN_CHECK_DEBUG */
10292  if (j >= (i/2)) {
10293  if (lDiags) {
10294  printf("... no, >= 50 percent 8-bit characters\n");
10295  }
10296  return(0);
10297  }
10298  /*
10299  We need to allocate space for a doctored-up version of the candidate
10300  unknown-license paragraph, but it's ONLY used in this function. E.g.,
10301  make darn sure we free it up before exiting this function...
10302  */
10303  cp = copyString(buf, MTAG_TEXTPARA);
10304  doctorBuffer(cp, isML, isPS, NO);
10305  /*
10306  If we detected a no-warraty statement earlier, "checknw" is != 0.
10307  Look for a no-warrany statement in this candidate paragraph.
10308  If we find it, report failure for the paragraph and remember
10309  finding the no--warranty.
10310  */
10311  if (checknw && !idxGrep(checknw, cp, REG_ICASE|REG_EXTENDED)) {
10312  if (lDiags) {
10313  printf("... no, warranty regex %d\n", checknw);
10314  }
10315  checknw = 0;
10316  memFree(cp, MTAG_TEXTPARA);
10317  return(0);
10318  }
10319  /*
10320  False-positive-check: GNU/FSF template (often see in ".po"
10321  and ".c" files
10322 
10323  "This file is distributed under the same license as the
10324  package PACKAGE"
10325  */
10326  if (dbgIdxGrep(_LT_BOGUSTMPL, cp, lDiags)) {
10327  if (lDiags) {
10328  printf("... no, FSF-GNU template\n");
10329  }
10330  memFree(cp, MTAG_TEXTPARA);
10331  return(0);
10332  }
10333  /*
10334  * False-positive-check: GNU GPL preamble statements; these have been
10335  * "sprinkled" throughout files seen before, so check ALL of them.
10336  */
10337  if (dbgIdxGrep(_PHR_GNU_FREEDOM, cp, lDiags) ||
10338  dbgIdxGrep(_PHR_GNU_COPYING, cp, lDiags) ||
10339  dbgIdxGrep(_PHR_GNU_PROTECT, cp, lDiags)) {
10340  if (lDiags) {
10341  printf("... no, GNU-GPL preamble\n");
10342  }
10343  memFree(cp, MTAG_TEXTPARA);
10344  return(0);
10345  }
10346  if (lDiags) {
10347  printf("... candidate paragraph analysis:\n");
10348  }
10349  for (i = j = 0; i < NKEYWORDS; i++) {
10350  if (idxGrep_recordPositionDoctored(i + _KW_first, cp, REG_EXTENDED | REG_ICASE)) {
10351  if (lDiags) {
10352  printf("%s", j ? ", " : "KEYWORDS: ");
10353  printf("%s", _REGEX(i+_KW_first));
10354  }
10355  j++;
10356  }
10357  }
10358  if (lDiags) {
10359  if (j) {
10360  printf("\n");
10361  }
10362  printf("SCORES: para %d, file %d == %05.2f%% ", j,
10363  score, 100.0 * (float) j / (float) score);
10364  }
10365  /*
10366  Here, we guess that an UnclassifiedLicense exists in a paragraph
10367  when:
10368  + a paragraph has a keyword-score of at least 3 -OR-
10369  + ... a keyword-score of 2 *AND* is >= 50% of the file's
10370  total score
10371 
10372  It's likely we'll see a few false-positives with a
10373  keyword-score of 2 but there are cases where this works.
10374  We can filter out the 2-scores we see
10375  with the FILTER checks below...
10376  */
10377  if (j == 0) { /* no license-like keywords */
10378  if (lDiags) {
10379  printf("(ZERO legal keywords)\n");
10380  }
10381  memFree(cp, MTAG_TEXTPARA);
10382  return(0);
10383  }
10384  if (j >= 3 || (j == 2 && j*2 >= score)) {
10385  if (j >= 3 && lDiags) {
10386  printf("(LIKELY: para-score >= 2)\n");
10387  }
10388  else if (lDiags) {
10389  printf("(MAYBE: local percentage)\n");
10390  }
10391  }
10392  else {
10393  if (lDiags) {
10394  printf("(NOT LIKELY a license)\n");
10395 #if 0
10396 #endif
10397  printf("[FAILED]\n%s\n[/FAILED]\n", buf);
10398  }
10399  memFree(cp, MTAG_TEXTPARA);
10400  return(0);
10401  }
10402  /*
10403  Sure, there ARE paragraphs with these words that do NOT constitute a
10404  real license. Look for key words and phrases of them HERE. This list
10405  of filters will likely grow over time.
10406  */
10407  for (i = 0; i < NFILTER; i++) {
10408  if (dbgIdxGrep(_FILTER_first+i, buf, lDiags)) {
10409  if (lDiags) {
10410  printf("!! NO-LIC: filter %d\n", ++i);
10411  }
10412  memFree(cp, MTAG_TEXTPARA);
10413  return(0);
10414  }
10415  }
10416  if (cur.licPara == NULL_STR) {
10417  saveLicenseParagraph(buf, isML, isPS, YES);
10418  }
10419  memFree(cp, MTAG_TEXTPARA);
10420  }
10421 #ifdef UNKNOWN_CHECK_DEBUG
10422  else {
10423  printf("match3: Initial-check only (save == %d)\n", save);
10424  }
10425 #endif /* UNKNOWN_CHECK_DEBUG */
10426  return(1);
10427 }
10428 
10429 void saveLicenseParagraph(char *mtext, int isML, int isPS, int entireBuf)
10430 {
10431  char *cp;
10432  char *start;
10433  int index=0;
10434  int len;
10435  start = copyString(mtext, MTAG_TEXTPARA);
10436  if(!start)
10437  {
10438  LOG_FATAL("called saveLicenseParagraph without text")
10439  Bail(-__LINE__);
10440  }
10441 #ifdef PROC_TRACE
10442 #ifdef PROC_TRACE_SWITCH
10443  if (gl.ptswitch)
10444 #endif /* PROC_TRACE_SWITCH */
10445  printf("== saveLicenseParagraph(%p, %d, %d, %d)\n", mtext, isML, isPS, entireBuf);
10446 #endif /* PROC_TRACE */
10447  /* */
10448  if (entireBuf) {
10449  cur.licPara = copyString(mtext, MTAG_TEXTPARA);
10450  } else {
10451  if (cur.regm.rm_so < 50) {
10452  len = cur.regm.rm_eo + 80;
10453  } else {
10454  len = cur.regm.rm_eo + 130 - cur.regm.rm_so;
10455  index = cur.regm.rm_so - 50;
10456  }
10457  cur.licPara = memAlloc(len + 9, MTAG_TEXTPARA);
10458  (void) strcpy(cur.licPara, "... ");
10459  (void) strncpy(cur.licPara + 4, start + index, len);
10460  (void) strcpy(cur.licPara + len + 4, " ...");
10461  memFree(start, MTAG_TEXTPARA);
10462  }
10463 
10464  /*
10465  * Convert double-line-feed chars ("\r" and "\n" combos) to a single "\n"
10466  */
10467  for (cp = cur.licPara; *cp; cp++) {
10468  if ((*cp == '\n' || *cp == '\r') &&
10469  (*(cp+1) == '\r' || *(cp+1) == '\n')) {
10470  *cp = ' ';
10471  *(cp+1) = '\n';
10472  }
10473  }
10474  if (lDiags) {
10475  printf("[PERHAPS] (%p)\n%s\n[/PERHAPS]\n", cur.licPara, cur.licPara);
10476  }
10477  return;
10478 }
10479 
10488 void spdxReference(char *filetext, int size, int isML, int isPS)
10489 {
10490  if (INFILE(_SPDX_Glide)) {
10491  INTERESTING("Glide");
10492  }
10493  if (INFILE(_SPDX_Abstyles)) {
10494  INTERESTING("Abstyles");
10495  }
10496  if (INFILE(_SPDX_AFL_11)) {
10497  INTERESTING("AFL-1.1");
10498  }
10499  if (INFILE(_SPDX_AFL_12)) {
10500  INTERESTING("AFL-1.2");
10501  }
10502  if (INFILE(_SPDX_AFL_20)) {
10503  INTERESTING("AFL-2.0");
10504  }
10505  if (INFILE(_SPDX_AFL_21)) {
10506  INTERESTING("AFL-2.1");
10507  }
10508  if (INFILE(_SPDX_AFL_30)) {
10509  INTERESTING("AFL-3.0");
10510  }
10511  if (INFILE(_SPDX_AMPAS)) {
10512  INTERESTING("AMPAS");
10513  }
10514  if (INFILE(_SPDX_APL_10)) {
10515  INTERESTING("APL-1.0");
10516  }
10517  if (INFILE(_SPDX_Adobe_Glyph)) {
10518  INTERESTING("Adobe-Glyph");
10519  }
10520  if (INFILE(_SPDX_APAFML)) {
10521  INTERESTING("APAFML");
10522  }
10523  if (INFILE(_SPDX_Adobe_2006)) {
10524  INTERESTING("Adobe-2006");
10525  }
10526  if (INFILE(_SPDX_Afmparse)) {
10527  INTERESTING("Afmparse");
10528  }
10529  if (INFILE(_SPDX_Aladdin)) {
10530  INTERESTING("Aladdin");
10531  }
10532  if (INFILE(_SPDX_ADSL)) {
10533  INTERESTING("ADSL");
10534  }
10535  if (INFILE(_SPDX_AMDPLPA)) {
10536  INTERESTING("AMDPLPA");
10537  }
10538  if (INFILE(_SPDX_ANTLR_PD)) {
10539  INTERESTING("ANTLR-PD");
10540  }
10541  if (INFILE(_SPDX_AML)) {
10542  INTERESTING("AML");
10543  }
10544  if (INFILE(_SPDX_APSL_10)) {
10545  INTERESTING("APSL-1.0");
10546  }
10547  if (INFILE(_SPDX_APSL_11)) {
10548  INTERESTING("APSL-1.1");
10549  }
10550  if (INFILE(_SPDX_APSL_12)) {
10551  INTERESTING("APSL-1.2");
10552  }
10553  if (INFILE(_SPDX_APSL_20)) {
10554  INTERESTING("APSL-2.0");
10555  }
10556  if (INFILE(_SPDX_Artistic_10_Perl)) {
10557  INTERESTING("Artistic-1.0-Perl");
10558  }
10559  else if (INFILE(_SPDX_Artistic_10_cl8)) {
10560  INTERESTING("Artistic-1.0-cl8");
10561  }
10562  else if (INFILE(_SPDX_Artistic_10)) {
10563  INTERESTING("Artistic-1.0");
10564  }
10565  if (INFILE(_SPDX_Artistic_20)) {
10566  INTERESTING("Artistic-2.0");
10567  }
10568  if (INFILE(_SPDX_AAL)) {
10569  INTERESTING("AAL");
10570  }
10571  if (INFILE(_SPDX_Bahyph)) {
10572  INTERESTING("Bahyph");
10573  }
10574  if (INFILE(_SPDX_Barr)) {
10575  INTERESTING("Barr");
10576  }
10577  if (INFILE(_SPDX_Beerware)) {
10578  INTERESTING("Beerware");
10579  }
10580  if (INFILE(_SPDX_BitTorrent_10)) {
10581  INTERESTING("BitTorrent-1.0");
10582  }
10583  else if (INFILE(_SPDX_BitTorrent_11)) {
10584  INTERESTING("BitTorrent-1.1");
10585  }
10586  if (INFILE(_SPDX_blessing)) {
10587  INTERESTING("blessing");
10588  }
10589  if (INFILE(_SPDX_BlueOak_100)) {
10590  INTERESTING("BlueOak-1.0.0");
10591  }
10592  if (INFILE(_SPDX_BSL_10)) {
10593  INTERESTING("BSL-1.0");
10594  }
10595  if (INFILE(_SPDX_Borceux)) {
10596  INTERESTING("Borceux");
10597  }
10598  if (INFILE(_SPDX_0BSD)) {
10599  INTERESTING("0BSD");
10600  }
10601  if (INFILE(_SPDX_bzip2_105)) {
10602  INTERESTING("bzip2-1.0.5");
10603  }
10604  else if (INFILE(_SPDX_bzip2_106)) {
10605  INTERESTING("bzip2-1.0.6");
10606  }
10607  if (INFILE(_SPDX_Caldera)) {
10608  INTERESTING("Caldera");
10609  }
10610  if (INFILE(_SPDX_CC_PDDC)) {
10611  INTERESTING("CC-PDDC");
10612  }
10613  if (INFILE(_SPDX_CERN_OHL_P_20)) {
10614  INTERESTING("CERN-OHL-P-2.0");
10615  }
10616  else if (INFILE(_SPDX_CERN_OHL_S_20)) {
10617  INTERESTING("CERN-OHL-S-2.0");
10618  }
10619  else if (INFILE(_SPDX_CERN_OHL_W_20)) {
10620  INTERESTING("CERN-OHL-W-2.0");
10621  }
10622  else if (INFILE(_SPDX_CERN_OHL_12)) {
10623  INTERESTING("CERN-OHL-1.2");
10624  }
10625  else if (INFILE(_SPDX_CERN_OHL_11)) {
10626  INTERESTING("CERN-OHL-1.1");
10627  }
10628  if (INFILE(_SPDX_ClArtistic)) {
10629  INTERESTING("ClArtistic");
10630  }
10631  if (INFILE(_SPDX_CNRI_Jython)) {
10632  INTERESTING("CNRI-Jython");
10633  }
10634  if (INFILE(_SPDX_CPOL_102)) {
10635  INTERESTING("CPOL-1.02");
10636  }
10637  if (INFILE(_SPDX_CPAL_10)) {
10638  INTERESTING("CPAL-1.0");
10639  }
10640  if (INFILE(_SPDX_CPL_10)) {
10641  INTERESTING("CPL-1.0");
10642  }
10643  if (INFILE(_SPDX_CAL_10_Combined_Work_Exception)) {
10644  INTERESTING("CAL-1.0-Combined-Work-Exception");
10645  }
10646  else if (INFILE(_SPDX_CAL_10)) {
10647  INTERESTING("CAL-1.0");
10648  }
10649  if (INFILE(_SPDX_CATOSL_11)) {
10650  INTERESTING("CATOSL-1.1");
10651  }
10652  if (INFILE(_SPDX_Condor_11)) {
10653  INTERESTING("Condor-1.1");
10654  }
10655  if (INFILE(_SPDX_CC_BY_10)) {
10656  INTERESTING("CC-BY-1.0");
10657  }
10658  else if (INFILE(_SPDX_CC_BY_20)) {
10659  INTERESTING("CC-BY-2.0");
10660  }
10661  else if (INFILE(_SPDX_CC_BY_25)) {
10662  INTERESTING("CC-BY-2.5");
10663  }
10664  else if (INFILE(_SPDX_CC_BY_30_AT)) {
10665  INTERESTING("CC-BY-3.0-AT");
10666  }
10667  else if (INFILE(_SPDX_CC_BY_30)) {
10668  INTERESTING("CC-BY-3.0");
10669  }
10670  else if (INFILE(_SPDX_CC_BY_40)) {
10671  INTERESTING("CC-BY-4.0");
10672  }
10673  if (INFILE(_SPDX_CC_BY_ND_10)) {
10674  INTERESTING("CC-BY-ND-1.0");
10675  }
10676  else if (INFILE(_SPDX_CC_BY_ND_20)) {
10677  INTERESTING("CC-BY-ND-2.0");
10678  }
10679  else if (INFILE(_SPDX_CC_BY_ND_25)) {
10680  INTERESTING("CC-BY-ND-2.5");
10681  }
10682  else if (INFILE(_SPDX_CC_BY_ND_30)) {
10683  INTERESTING("CC-BY-ND-3.0");
10684  }
10685  else if (INFILE(_SPDX_CC_BY_ND_40)) {
10686  INTERESTING("CC-BY-ND-4.0");
10687  }
10688  if (INFILE(_SPDX_CC_BY_NC_10)) {
10689  INTERESTING("CC-BY-NC-1.0");
10690  }
10691  else if (INFILE(_SPDX_CC_BY_NC_20)) {
10692  INTERESTING("CC-BY-NC-2.0");
10693  }
10694  else if (INFILE(_SPDX_CC_BY_NC_25)) {
10695  INTERESTING("CC-BY-NC-2.5");
10696  }
10697  else if (INFILE(_SPDX_CC_BY_NC_30)) {
10698  INTERESTING("CC-BY-NC-3.0");
10699  }
10700  else if (INFILE(_SPDX_CC_BY_NC_40)) {
10701  INTERESTING("CC-BY-NC-4.0");
10702  }
10703  if (INFILE(_SPDX_CC_BY_NC_ND_10)) {
10704  INTERESTING("CC-BY-NC-ND-1.0");
10705  }
10706  else if (INFILE(_SPDX_CC_BY_NC_ND_20)) {
10707  INTERESTING("CC-BY-NC-ND-2.0");
10708  }
10709  else if (INFILE(_SPDX_CC_BY_NC_ND_25)) {
10710  INTERESTING("CC-BY-NC-ND-2.5");
10711  }
10712  else if (INFILE(_SPDX_CC_BY_NC_ND_30_IGO)) {
10713  INTERESTING("CC-BY-NC-ND-3.0-IGO");
10714  }
10715  else if (INFILE(_SPDX_CC_BY_NC_ND_30)) {
10716  INTERESTING("CC-BY-NC-ND-3.0");
10717  }
10718  else if (INFILE(_SPDX_CC_BY_NC_ND_40)) {
10719  INTERESTING("CC-BY-NC-ND-4.0");
10720  }
10721  if (INFILE(_SPDX_CC_BY_NC_SA_10)) {
10722  INTERESTING("CC-BY-NC-SA-1.0");
10723  }
10724  else if (INFILE(_SPDX_CC_BY_NC_SA_20)) {
10725  INTERESTING("CC-BY-NC-SA-2.0");
10726  }
10727  else if (INFILE(_SPDX_CC_BY_NC_SA_25)) {
10728  INTERESTING("CC-BY-NC-SA-2.5");
10729  }
10730  else if (INFILE(_SPDX_CC_BY_NC_SA_30)) {
10731  INTERESTING("CC-BY-NC-SA-3.0");
10732  }
10733  else if (INFILE(_SPDX_CC_BY_NC_SA_40)) {
10734  INTERESTING("CC-BY-NC-SA-4.0");
10735  }
10736  if (INFILE(_SPDX_CC_BY_SA_10)) {
10737  INTERESTING("CC-BY-SA-1.0");
10738  }
10739  else if (INFILE(_SPDX_CC_BY_SA_20)) {
10740  INTERESTING("CC-BY-SA-2.0");
10741  }
10742  else if (INFILE(_SPDX_CC_BY_SA_25)) {
10743  INTERESTING("CC-BY-SA-2.5");
10744  }
10745  else if (INFILE(_SPDX_CC_BY_SA_30_AT)) {
10746  INTERESTING("CC-BY-SA-3.0-AT");
10747  }
10748  else if (INFILE(_SPDX_CC_BY_SA_30)) {
10749  INTERESTING("CC-BY-SA-3.0");
10750  }
10751  else if (INFILE(_SPDX_CC_BY_SA_40)) {
10752  INTERESTING("CC-BY-SA-4.0");
10753  }
10754  if (INFILE(_SPDX_CDLA_Permissive_10)) {
10755  INTERESTING("CDLA-Permissive-1.0");
10756  }
10757  if (INFILE(_SPDX_CDLA_Sharing_10)) {
10758  INTERESTING("CDLA-Sharing-1.0");
10759  }
10760  if (INFILE(_SPDX_Crossword)) {
10761  INTERESTING("Crossword");
10762  }
10763  if (INFILE(_SPDX_CrystalStacker)) {
10764  INTERESTING("CrystalStacker");
10765  }
10766  if (INFILE(_SPDX_CUA_OPL_10)) {
10767  INTERESTING("CUA-OPL-1.0");
10768  }
10769  if (INFILE(_SPDX_Cube)) {
10770  INTERESTING("Cube");
10771  }
10772  if (INFILE(_SPDX_curl)) {
10773  INTERESTING("curl");
10774  }
10775  if (INFILE(_SPDX_D_FSL_10)) {
10776  INTERESTING("D-FSL-1.0");
10777  }
10778  if (INFILE(_SPDX_diffmark)) {
10779  INTERESTING("diffmark");
10780  }
10781  if (INFILE(_SPDX_WTFPL)) {
10782  INTERESTING("WTFPL");
10783  }
10784  if (HASTEXT(_SPDX_DOC, REG_EXTENDED) || HASTEXT(_PHR_DOC, REG_EXTENDED)) {
10785  INTERESTING("DOC");
10786  }
10787  if (INFILE(_SPDX_Dotseqn)) {
10788  INTERESTING("Dotseqn");
10789  }
10790  if (INFILE(_SPDX_DSDP)) {
10791  INTERESTING("DSDP");
10792  }
10793  if (INFILE(_SPDX_dvipdfm)) {
10794  INTERESTING("dvipdfm");
10795  }
10796  if (INFILE(_SPDX_EPL_10)) {
10797  INTERESTING("EPL-1.0");
10798  }
10799  else if (INFILE(_SPDX_EPL_20)) {
10800  INTERESTING("EPL-2.0");
10801  }
10802  if (INFILE(_SPDX_ECL_10)) {
10803  INTERESTING("ECL-1.0");
10804  }
10805  if (INFILE(_SPDX_ECL_20)) {
10806  INTERESTING("ECL-2.0");
10807  }
10808  if (INFILE(_SPDX_eGenix)) {
10809  INTERESTING("eGenix");
10810  }
10811  if (INFILE(_SPDX_EFL_10)) {
10812  INTERESTING("EFL-1.0");
10813  }
10814  if (INFILE(_SPDX_EFL_20)) {
10815  INTERESTING("EFL-2.0");
10816  }
10817  if (INFILE(_SPDX_Entessa)) {
10818  INTERESTING("Entessa");
10819  }
10820  if (INFILE(_SPDX_EPICS)) {
10821  INTERESTING("EPICS");
10822  }
10823  if (INFILE(_SPDX_ErlPL_11)) {
10824  INTERESTING("ErlPL-1.1");
10825  }
10826  if (INFILE(_SPDX_etalab_20)) {
10827  INTERESTING("etalab-2.0");
10828  }
10829  if (INFILE(_SPDX_EUDatagrid)) {
10830  INTERESTING("EUDatagrid");
10831  }
10832  if (INFILE(_SPDX_EUPL_10)) {
10833  INTERESTING("EUPL-1.0");
10834  }
10835  else if (INFILE(_SPDX_EUPL_11)) {
10836  INTERESTING("EUPL-1.1");
10837  }
10838  else if (INFILE(_SPDX_EUPL_12)) {
10839  INTERESTING("EUPL-1.2");
10840  }
10841  if (INFILE(_SPDX_Eurosym)) {
10842  INTERESTING("Eurosym");
10843  }
10844  if (HASTEXT(_SPDX_Fair, REG_EXTENDED) || HASTEXT(_PHR_Fair, REG_EXTENDED)) {
10845  INTERESTING("Fair");
10846  }
10847  if (INFILE(_SPDX_Frameworx_10)) {
10848  INTERESTING("Frameworx-1.0");
10849  }
10850  if (INFILE(_SPDX_FreeImage)) {
10851  INTERESTING("FreeImage");
10852  }
10853  if (INFILE(_SPDX_FSFAP)) {
10854  INTERESTING("FSFAP");
10855  }
10856  if (INFILE(_SPDX_FSFULLR)) {
10857  INTERESTING("FSFULLR");
10858  }
10859  else if (INFILE(_SPDX_FSFUL)) {
10860  INTERESTING("FSFUL");
10861  }
10862  if (INFILE(_SPDX_Giftware)) {
10863  INTERESTING("Giftware");
10864  }
10865  if (INFILE(_SPDX_GL2PS)) {
10866  INTERESTING("GL2PS");
10867  }
10868  if (INFILE(_SPDX_Glulxe)) {
10869  INTERESTING("Glulxe");
10870  }
10871  if (INFILE(_SPDX_GFDL_11_invariants_or_later)) {
10872  INTERESTING("GFDL-1.1-invariants-or-later");
10873  }
10874  else if (INFILE(_SPDX_GFDL_11_no_invariants_or_later)) {
10875  INTERESTING("GFDL-1.1-no-invariants-or-later");
10876  }
10877  else if (INFILE(_SPDX_GFDL_11_invariants_only)) {
10878  INTERESTING("GFDL-1.1-invariants-only");
10879  }
10880  else if (INFILE(_SPDX_GFDL_11_no_invariants_only)) {
10881  INTERESTING("GFDL-1.1-no-invariants-only");
10882  }
10883  else if (INFILE(_SPDX_GFDL_11_or_later)
10884  || HASTEXT(_SPDX_GFDL_11plus, REG_EXTENDED)
10885  || HASTEXT(_PHR_GFDL_11plus, REG_EXTENDED))
10886  {
10887  INTERESTING("GFDL-1.1-or-later");
10888  }
10889  else if (INFILE(_SPDX_GFDL_11)) {
10890  INTERESTING("GFDL-1.1-only");
10891  }
10892  else if (INFILE(_SPDX_GFDL_12_invariants_or_later)) {
10893  INTERESTING("GFDL-1.2-invariants-or-later");
10894  }
10895  else if (INFILE(_SPDX_GFDL_12_no_invariants_or_later)) {
10896  INTERESTING("GFDL-1.2-no-invariants-or-later");
10897  }
10898  else if (INFILE(_SPDX_GFDL_12_invariants_only)) {
10899  INTERESTING("GFDL-1.2-invariants-only");
10900  }
10901  else if (INFILE(_SPDX_GFDL_12_no_invariants_only)) {
10902  INTERESTING("GFDL-1.2-no-invariants-only");
10903  }
10904  else if (INFILE(_SPDX_GFDL_12_or_later)
10905  || HASTEXT(_SPDX_GFDL_12plus, REG_EXTENDED)
10906  || HASTEXT(_PHR_GFDL_12plus, REG_EXTENDED))
10907  {
10908  INTERESTING("GFDL-1.2-or-later");
10909  }
10910  else if (INFILE(_SPDX_GFDL_12)) {
10911  INTERESTING("GFDL-1.2-only");
10912  }
10913  else if (INFILE(_SPDX_GFDL_13_invariants_or_later)) {
10914  INTERESTING("GFDL-1.3-invariants-or-later");
10915  }
10916  else if (INFILE(_SPDX_GFDL_13_no_invariants_or_later)) {
10917  INTERESTING("GFDL-1.3-no-invariants-or-later");
10918  }
10919  else if (INFILE(_SPDX_GFDL_13_invariants_only)) {
10920  INTERESTING("GFDL-1.3-invariants-only");
10921  }
10922  else if (INFILE(_SPDX_GFDL_13_no_invariants_only)) {
10923  INTERESTING("GFDL-1.3-no-invariants-only");
10924  }
10925  else if (INFILE(_SPDX_GFDL_13_or_later)
10926  || HASTEXT(_SPDX_GFDL_13plus, REG_EXTENDED)
10927  || HASTEXT(_PHR_GFDL_13plus, REG_EXTENDED))
10928  {
10929  INTERESTING("GFDL-1.3-or-later");
10930  }
10931  else if (INFILE(_SPDX_GFDL_13)) {
10932  INTERESTING("GFDL-1.3");
10933  }
10934  if (INFILE(_SPDX_GLWTPL)) {
10935  INTERESTING("GLWTPL");
10936  }
10937  if (INFILE(_SPDX_gnuplot)) {
10938  INTERESTING("gnuplot");
10939  }
10940  if (INFILE(_SPDX_gSOAP_13b)) {
10941  INTERESTING("gSOAP-1.3b");
10942  }
10943  if (INFILE(_SPDX_HaskellReport)) {
10944  INTERESTING("HaskellReport");
10945  }
10946  if (INFILE(_SPDX_Hippocratic_21)) {
10947  INTERESTING("Hippocratic-2.1");
10948  }
10949  if (INFILE(_SPDX_HPND_sell_variant)) {
10950  INTERESTING("HPND-sell-variant");
10951  }
10952  else if (INFILE(_SPDX_HPND)) {
10953  INTERESTING("HPND");
10954  }
10955  if (INFILE(_SPDX_IBM_pibs)) {
10956  INTERESTING("IBM-pibs");
10957  }
10958  if (INFILE(_SPDX_IPL_10)) {
10959  INTERESTING("IPL-1.0");
10960  }
10961  if (INFILE(_SPDX_ImageMagick)) {
10962  INTERESTING("ImageMagick");
10963  }
10964  if (INFILE(_SPDX_iMatix)) {
10965  INTERESTING("iMatix");
10966  }
10967  if (INFILE(_SPDX_Imlib2)) {
10968  INTERESTING("Imlib2");
10969  }
10970  if (INFILE(_SPDX_IJG)) {
10971  INTERESTING("IJG");
10972  }
10973  if (INFILE(_SPDX_Info_ZIP)) {
10974  INTERESTING("Info-ZIP");
10975  }
10976  if (INFILE(_SPDX_Interbase_10)) {
10977  INTERESTING("Interbase-1.0");
10978  }
10979  if (INFILE(_SPDX_IPA)) {
10980  INTERESTING("IPA");
10981  }
10982  if (INFILE(_SPDX_ISC)) {
10983  INTERESTING("ISC");
10984  }
10985  if (INFILE(_SPDX_JasPer_20)) {
10986  INTERESTING("JasPer-2.0");
10987  }
10988  if (INFILE(_SPDX_JPNIC)) {
10989  INTERESTING("JPNIC");
10990  }
10991  if (INFILE(_SPDX_JSON)) {
10992  INTERESTING("JSON");
10993  }
10994  if (INFILE(_SPDX_Latex2e)) {
10995  INTERESTING("Latex2e");
10996  }
10997  if (INFILE(_SPDX_Leptonica)) {
10998  INTERESTING("Leptonica");
10999  }
11000  if (INFILE(_SPDX_LGPLLR)) {
11001  INTERESTING("LGPLLR");
11002  }
11003  if (INFILE(_SPDX_libpng_20)) {
11004  INTERESTING("libpng-2.0");
11005  }
11006  else if (INFILE(_SPDX_Libpng)) {
11007  INTERESTING("Libpng");
11008  }
11009  if (INFILE(_SPDX_libselinux_10)) {
11010  INTERESTING("libselinux-1.0");
11011  }
11012  if (INFILE(_SPDX_libtiff)) {
11013  INTERESTING("libtiff");
11014  }
11015  if (INFILE(_SPDX_LAL_12)) {
11016  INTERESTING("LAL-1.2");
11017  }
11018  if (INFILE(_SPDX_LAL_13)) {
11019  INTERESTING("LAL-1.3");
11020  }
11021  if (INFILE(_SPDX_LiLiQ_P_11)) {
11022  INTERESTING("LiLiQ-P-1.1");
11023  }
11024  if (INFILE(_SPDX_LiLiQ_Rplus_11)) {
11025  INTERESTING("LiLiQ-Rplus-1.1");
11026  }
11027  if (INFILE(_SPDX_LiLiQ_R_11)) {
11028  INTERESTING("LiLiQ-R-1.1");
11029  }
11030  if (INFILE(_SPDX_Linux_OpenIB)) {
11031  INTERESTING("Linux-OpenIB");
11032  }
11033  if (INFILE(_SPDX_LPL_102)) {
11034  INTERESTING("LPL-1.02");
11035  }
11036  else if (INFILE(_SPDX_LPL_10)) {
11037  INTERESTING("LPL-1.0");
11038  }
11039  if (INFILE(_SPDX_LPPL_10)) {
11040  INTERESTING("LPPL-1.0");
11041  }
11042  if (INFILE(_SPDX_LPPL_11)) {
11043  INTERESTING("LPPL-1.1");
11044  }
11045  if (INFILE(_SPDX_LPPL_12)) {
11046  INTERESTING("LPPL-1.2");
11047  }
11048  if (INFILE(_SPDX_LPPL_13a)) {
11049  INTERESTING("LPPL-1.3a");
11050  }
11051  if (INFILE(_SPDX_LPPL_13c)) {
11052  INTERESTING("LPPL-1.3c");
11053  }
11054  if (INFILE(_SPDX_MakeIndex)) {
11055  INTERESTING("MakeIndex");
11056  }
11057  if (INFILE(_SPDX_MTLL)) {
11058  INTERESTING("MTLL");
11059  }
11060  if (INFILE(_SPDX_MS_PL)) {
11061  INTERESTING("MS-PL");
11062  }
11063  if (INFILE(_SPDX_MS_RL)) {
11064  INTERESTING("MS-RL");
11065  }
11066  if (INFILE(_SPDX_MirOS)) {
11067  INTERESTING("MirOS");
11068  }
11069  if (INFILE(_SPDX_MITNFA)) {
11070  INTERESTING("MITNFA");
11071  }
11072  if (!lmem[_fREAL] && INFILE(_SPDX_Motosoto)) {
11073  INTERESTING("Motosoto");
11074  }
11075  if (INFILE(_SPDX_mpich2)) {
11076  INTERESTING("mpich2");
11077  }
11078  if (INFILE(_SPDX_MulanPSL_20)) {
11079  INTERESTING("MulanPSL-2.0");
11080  }
11081  else if (INFILE(_SPDX_MulanPSL_10)) {
11082  INTERESTING("MulanPSL-1.0");
11083  }
11084  if (INFILE(_SPDX_Multics)) {
11085  INTERESTING("Multics");
11086  }
11087  if (INFILE(_SPDX_Mup)) {
11088  INTERESTING("Mup");
11089  }
11090  if (INFILE(_SPDX_NASA_13)) {
11091  INTERESTING("NASA-1.3");
11092  }
11093  if (INFILE(_SPDX_Naumen)) {
11094  INTERESTING("Naumen");
11095  }
11096  if (INFILE(_SPDX_NBPL_10)) {
11097  INTERESTING("NBPL-1.0");
11098  }
11099  if (INFILE(_SPDX_NCGL_UK_20)) {
11100  INTERESTING("NCGL-UK-2.0");
11101  }
11102  if (INFILE(_SPDX_Net_SNMP)) {
11103  INTERESTING("Net-SNMP");
11104  }
11105  if (INFILE(_SPDX_NetCDF)) {
11106  INTERESTING("NetCDF");
11107  }
11108  if (INFILE(_SPDX_NGPL)) {
11109  INTERESTING("NGPL");
11110  }
11111  if (INFILE(_SPDX_NIST_PD_fallback)) {
11112  INTERESTING("NIST-PD-fallback");
11113  }
11114  else if (INFILE(_SPDX_NIST_PD)) {
11115  INTERESTING("NIST-PD");
11116  }
11117  if (INFILE(_SPDX_NOSL)) {
11118  INTERESTING("NOSL");
11119  }
11120  if (INFILE(_SPDX_NPL_10)) {
11121  INTERESTING("NPL-1.0");
11122  }
11123  if (INFILE(_SPDX_NPL_11)) {
11124  INTERESTING("NPL-1.1");
11125  }
11126  if (INFILE(_SPDX_Newsletr)) {
11127  INTERESTING("Newsletr");
11128  }
11129  if (INFILE(_SPDX_NLPL)) {
11130  INTERESTING("NLPL");
11131  }
11132  if (INFILE(_SPDX_Nokia) && NOT_INFILE(_LT_OPENSSL_NOKIA)) {
11133  INTERESTING("Nokia");
11134  }
11135  if (INFILE(_SPDX_NPOSL_30)) {
11136  INTERESTING("NPOSL-3.0");
11137  }
11138  if (INFILE(_SPDX_NLOD_10)) {
11139  INTERESTING("NLOD-1.0");
11140  }
11141  if (INFILE(_SPDX_Noweb)) {
11142  INTERESTING("Noweb");
11143  }
11144  if (INFILE(_SPDX_NRL)) {
11145  INTERESTING("NRL");
11146  }
11147  if (INFILE(_SPDX_NTP_0)) {
11148  INTERESTING("NTP-0");
11149  }
11150  else if (INFILE(_SPDX_NTP)) {
11151  INTERESTING("NTP");
11152  }
11153  if (INFILE(_SPDX_Nunit)) {
11154  INTERESTING("Nunit");
11155  }
11156  if (INFILE(_SPDX_O_UDA_10)) {
11157  INTERESTING("O-UDA-1.0");
11158  }
11159  if (INFILE(_SPDX_OCLC_20)) {
11160  INTERESTING("OCLC-2.0");
11161  }
11162  if (INFILE(_SPDX_ODbL_10)) {
11163  INTERESTING("ODbL-1.0");
11164  }
11165  if (INFILE(_SPDX_OGC_10)) {
11166  INTERESTING("OGC-1.0");
11167  }
11168  if (INFILE(_SPDX_PDDL_10)) {
11169  INTERESTING("PDDL-1.0");
11170  }
11171  if (INFILE(_SPDX_OCCT_PL)) {
11172  INTERESTING("OCCT-PL");
11173  }
11174  if (INFILE(_SPDX_ODC_By_10)) {
11175  INTERESTING("ODC-By-1.0");
11176  }
11177  if (INFILE(_SPDX_OGL_Canada_20)) {
11178  INTERESTING("OGL-Canada-2.0");
11179  }
11180  if (INFILE(_SPDX_OGL_UK_10)) {
11181  INTERESTING("OGL-UK-1.0");
11182  }
11183  else if (INFILE(_SPDX_OGL_UK_20)) {
11184  INTERESTING("OGL-UK-2.0");
11185  }
11186  else if (INFILE(_SPDX_OGL_UK_30)) {
11187  INTERESTING("OGL-UK-3.0");
11188  }
11189  if (INFILE(_SPDX_OGTSL)) {
11190  INTERESTING("OGTSL");
11191  }
11192  if (INFILE(_SPDX_OLDAP_11)) {
11193  INTERESTING("OLDAP-1.1");
11194  }
11195  else if (INFILE(_SPDX_OLDAP_12)) {
11196  INTERESTING("OLDAP-1.2");
11197  }
11198  else if (INFILE(_SPDX_OLDAP_13)) {
11199  INTERESTING("OLDAP-1.3");
11200  }
11201  else if (INFILE(_SPDX_OLDAP_14)) {
11202  INTERESTING("OLDAP-1.4");
11203  }
11204  else if (INFILE(_SPDX_OLDAP_201)) {
11205  INTERESTING("OLDAP-2.0.1");
11206  }
11207  else if (INFILE(_SPDX_OLDAP_20)) {
11208  INTERESTING("OLDAP-2.0");
11209  }
11210  else if (INFILE(_SPDX_OLDAP_21)) {
11211  INTERESTING("OLDAP-2.1");
11212  }
11213  else if (INFILE(_SPDX_OLDAP_221)) {
11214  INTERESTING("OLDAP-2.2.1");
11215  }
11216  else if (INFILE(_SPDX_OLDAP_222)) {
11217  INTERESTING("OLDAP-2.2.2");
11218  }
11219  else if (INFILE(_SPDX_OLDAP_22)) {
11220  INTERESTING("OLDAP-2.2");
11221  }
11222  else if (INFILE(_SPDX_OLDAP_23)) {
11223  INTERESTING("OLDAP-2.3");
11224  }
11225  else if (INFILE(_SPDX_OLDAP_24)) {
11226  INTERESTING("OLDAP-2.4");
11227  }
11228  else if (INFILE(_SPDX_OLDAP_25)) {
11229  INTERESTING("OLDAP-2.5");
11230  }
11231  else if (INFILE(_SPDX_OLDAP_26)) {
11232  INTERESTING("OLDAP-2.6");
11233  }
11234  else if (INFILE(_SPDX_OLDAP_27)) {
11235  INTERESTING("OLDAP-2.7");
11236  }
11237  else if (INFILE(_SPDX_OLDAP_28)) {
11238  INTERESTING("OLDAP-2.8");
11239  }
11240  if (INFILE(_SPDX_OML)) {
11241  INTERESTING("OML");
11242  }
11243  if (INFILE(_SPDX_OPL_10)) {
11244  INTERESTING("OPL-1.0");
11245  }
11246  if (INFILE(_SPDX_OSL_10)) {
11247  INTERESTING("OSL-1.0");
11248  }
11249  if (INFILE(_SPDX_OSL_11)) {
11250  INTERESTING("OSL-1.1");
11251  }
11252  if (INFILE(_SPDX_OSL_20)) {
11253  INTERESTING("OSL-2.0");
11254  }
11255  if (INFILE(_SPDX_OSL_21)) {
11256  INTERESTING("OSL-2.1");
11257  }
11258  if (INFILE(_SPDX_OSL_30)) {
11259  INTERESTING("OSL-3.0");
11260  }
11261  if (INFILE(_SPDX_OSET_PL_21)) {
11262  INTERESTING("OSET-PL-2.1");
11263  }
11264  if (INFILE(_SPDX_Parity_700)) {
11265  INTERESTING("Parity-7.0.0");
11266  }
11267  else if (INFILE(_SPDX_Parity_600)) {
11268  INTERESTING("Parity-6.0.0");
11269  }
11270  if (INFILE(_SPDX_PHP_301)) {
11271  INTERESTING("PHP-3.01");
11272  }
11273  else if (INFILE(_SPDX_PHP_30)) {
11274  INTERESTING("PHP-3.0");
11275  }
11276  if (INFILE(_SPDX_Plexus)) {
11277  INTERESTING("Plexus");
11278  }
11279  if (INFILE(_SPDX_PolyForm_Noncommercial_100)) {
11280  INTERESTING("PolyForm-Noncommercial-1.0.0");
11281  }
11282  else if (INFILE(_SPDX_PolyForm_Small_Business_100)) {
11283  INTERESTING("PolyForm-Small-Business-1.0.0");
11284  }
11285  if (INFILE(_SPDX_PostgreSQL)) {
11286  INTERESTING("PostgreSQL");
11287  }
11288  if (INFILE(_SPDX_PSF_20)) {
11289  INTERESTING("PSF-2.0");
11290  }
11291  if (INFILE(_SPDX_psfrag)) {
11292  INTERESTING("psfrag");
11293  }
11294  if (INFILE(_SPDX_psutils)) {
11295  INTERESTING("psutils");
11296  }
11297  if (INFILE(_SPDX_Python_20)) {
11298  INTERESTING("Python-2.0");
11299  }
11300  if (INFILE(_SPDX_QPL_10)) {
11301  INTERESTING("QPL-1.0");
11302  }
11303  if (INFILE(_SPDX_Qhull)) {
11304  INTERESTING("Qhull");
11305  }
11306  if (INFILE(_SPDX_Rdisc)) {
11307  INTERESTING("Rdisc");
11308  }
11309  if (INFILE(_SPDX_RPSL_10)) {
11310  INTERESTING("RPSL-1.0");
11311  }
11312  if (INFILE(_SPDX_RPL_11)) {
11313  INTERESTING("RPL-1.1");
11314  }
11315  if (INFILE(_SPDX_RPL_15)) {
11316  INTERESTING("RPL-1.5");
11317  }
11318  if (INFILE(_SPDX_RHeCos_11)) {
11319  INTERESTING("RHeCos-1.1");
11320  }
11321  if (INFILE(_SPDX_RSCPL)) {
11322  INTERESTING("RSCPL");
11323  }
11324  if (INFILE(_SPDX_RSA_MD)) {
11325  INTERESTING("RSA-MD");
11326  }
11327  if (INFILE(_SPDX_Ruby)) {
11328  INTERESTING("Ruby");
11329  }
11330  if (INFILE(_SPDX_SAX_PD)) {
11331  INTERESTING("SAX-PD");
11332  }
11333  if (INFILE(_SPDX_Saxpath)) {
11334  INTERESTING("Saxpath");
11335  }
11336  if (INFILE(_SPDX_SHL_051)) {
11337  INTERESTING("SHL-0.51");
11338  }
11339  else if (INFILE(_SPDX_SHL_05)) {
11340  INTERESTING("SHL-0.5");
11341  }
11342  if (INFILE(_SPDX_SCEA)) {
11343  INTERESTING("SCEA");
11344  }
11345  if (INFILE(_SPDX_SWL)) {
11346  INTERESTING("SWL");
11347  }
11348  if (INFILE(_SPDX_SMPPL)) {
11349  INTERESTING("SMPPL");
11350  }
11351  if (INFILE(_SPDX_Sendmail_823)) {
11352  INTERESTING("Sendmail-8.23");
11353  }
11354  else if (INFILE(_SPDX_Sendmail)) {
11355  INTERESTING("Sendmail");
11356  }
11357  if (INFILE(_SPDX_SGI_B_10)) {
11358  INTERESTING("SGI-B-1.0");
11359  }
11360  if (INFILE(_SPDX_SGI_B_11)) {
11361  INTERESTING("SGI-B-1.1");
11362  }
11363  if (INFILE(_SPDX_SGI_B_20)) {
11364  INTERESTING("SGI-B-2.0");
11365  }
11366  if (INFILE(_SPDX_SimPL_20)) {
11367  INTERESTING("SimPL-2.0");
11368  }
11369  if (INFILE(_SPDX_Sleepycat)) {
11370  INTERESTING("Sleepycat");
11371  }
11372  if (INFILE(_SPDX_SNIA)) {
11373  INTERESTING("SNIA");
11374  }
11375  if (INFILE(_SPDX_Spencer_86)) {
11376  INTERESTING("Spencer-86");
11377  }
11378  if (INFILE(_SPDX_Spencer_94)) {
11379  INTERESTING("Spencer-94");
11380  }
11381  if (INFILE(_SPDX_Spencer_99)) {
11382  INTERESTING("Spencer-99");
11383  }
11384  if (INFILE(_SPDX_SMLNJ)) {
11385  INTERESTING("SMLNJ");
11386  }
11387  if (INFILE(_SPDX_SSH_OpenSSH)) {
11388  INTERESTING("SSH-OpenSSH");
11389  }
11390  if (INFILE(_SPDX_SSH_short)) {
11391  INTERESTING("SSH-short");
11392  }
11393  if (INFILE(_SPDX_SSPL_10)) {
11394  INTERESTING("SSPL-1.0");
11395  }
11396  if (INFILE(_SPDX_SugarCRM_113)) {
11397  INTERESTING("SugarCRM-1.1.3");
11398  }
11399  if (INFILE(_SPDX_SISSL_12)) {
11400  INTERESTING("SISSL-1.2");
11401  }
11402  else if (!lmem[_fREAL] && INFILE(_SPDX_SISSL)) {
11403  INTERESTING("SISSL");
11404  }
11405  if (INFILE(_SPDX_SPL_10)) {
11406  INTERESTING("SPL-1.0");
11407  }
11408  if (INFILE(_SPDX_Watcom_10)) {
11409  INTERESTING("Watcom-1.0");
11410  }
11411  if (INFILE(_SPDX_TAPR_OHL_10)) {
11412  INTERESTING("TAPR-OHL-1.0");
11413  }
11414  if (INFILE(_SPDX_TCP_wrappers)) {
11415  INTERESTING("TCP-wrappers");
11416  }
11417  if (INFILE(_SPDX_Unlicense)) {
11418  INTERESTING("Unlicense");
11419  }
11420  if (INFILE(_SPDX_TMate)) {
11421  INTERESTING("TMate");
11422  }
11423  if (INFILE(_SPDX_TORQUE_11)) {
11424  INTERESTING("TORQUE-1.1");
11425  }
11426  if (INFILE(_SPDX_TOSL)) {
11427  INTERESTING("TOSL");
11428  }
11429  if (INFILE(_SPDX_TU_Berlin_10)) {
11430  INTERESTING("TU-Berlin-1.0");
11431  }
11432  else if (INFILE(_SPDX_TU_Berlin_20)) {
11433  INTERESTING("TU-Berlin-2.0");
11434  }
11435  if (INFILE(_SPDX_UCL_10)) {
11436  INTERESTING("UCL-1.0");
11437  }
11438  if (INFILE(_SPDX_Unicode_DFS_2015)) {
11439  INTERESTING("Unicode-DFS-2015");
11440  }
11441  if (INFILE(_SPDX_Unicode_DFS_2016)) {
11442  INTERESTING("Unicode-DFS-2016");
11443  }
11444  if (INFILE(_SPDX_Unicode_TOU)) {
11445  INTERESTING("Unicode-TOU");
11446  }
11447  if (INFILE(_SPDX_UPL_10)) {
11448  INTERESTING("UPL-1.0");
11449  }
11450  if (INFILE(_SPDX_NCSA)) {
11451  INTERESTING("NCSA");
11452  }
11453  if (INFILE(_SPDX_Vim)) {
11454  INTERESTING("Vim");
11455  }
11456  if (INFILE(_SPDX_VOSTROM)) {
11457  INTERESTING("VOSTROM");
11458  }
11459  if (INFILE(_SPDX_VSL_10)) {
11460  INTERESTING("VSL-1.0");
11461  }
11462  if (INFILE(_SPDX_W3C_20150513)) {
11463  INTERESTING("W3C-20150513");
11464  }
11465  else if (INFILE(_SPDX_W3C_19980720)) {
11466  INTERESTING("W3C-19980720");
11467  }
11468  else if (INFILE(_SPDX_W3C)) {
11469  INTERESTING("W3C");
11470  }
11471  if (INFILE(_SPDX_Wsuipa)) {
11472  INTERESTING("Wsuipa");
11473  }
11474  if (!lmem[_fREAL] && INFILE(_SPDX_Xnet)) {
11475  INTERESTING("Xnet");
11476  }
11477  if (INFILE(_SPDX_X11)) {
11478  INTERESTING("X11");
11479  }
11480  if (INFILE(_SPDX_Xerox)) {
11481  INTERESTING("Xerox");
11482  }
11483  if (INFILE(_SPDX_XFree86_11)) {
11484  INTERESTING("XFree86-1.1");
11485  }
11486  if (INFILE(_SPDX_xinetd)) {
11487  INTERESTING("xinetd");
11488  }
11489  if (INFILE(_SPDX_xpp)) {
11490  INTERESTING("xpp");
11491  }
11492  if (INFILE(_SPDX_XSkat)) {
11493  INTERESTING("XSkat");
11494  }
11495  if (INFILE(_SPDX_YPL_10)) {
11496  INTERESTING("YPL-1.0");
11497  }
11498  if (INFILE(_SPDX_YPL_11)) {
11499  INTERESTING("YPL-1.1");
11500  }
11501  if (INFILE(_SPDX_Zed)) {
11502  INTERESTING("Zed");
11503  }
11504  if (INFILE(_SPDX_Zend_20)) {
11505  INTERESTING("Zend-2.0");
11506  }
11507  if (INFILE(_SPDX_Zimbra_13)) {
11508  INTERESTING("Zimbra-1.3");
11509  }
11510  if (INFILE(_SPDX_Zimbra_14)) {
11511  INTERESTING("Zimbra-1.4");
11512  }
11513  return;
11514 }
11515 
11520 void copyleftExceptions(char *filetext, int size, int isML, int isPS)
11521 {
11522  if (INFILE(_SPDX_389_exception)) {
11523  INTERESTING("389-exception");
11524  }
11525  if (INFILE(_SPDX_Autoconf_exception_20)) {
11526  INTERESTING("Autoconf-exception-2.0");
11527  }
11528  if (INFILE(_SPDX_Autoconf_exception_30)) {
11529  INTERESTING("Autoconf-exception-3.0");
11530  }
11531  if (INFILE(_SPDX_Bison_exception_22)) {
11532  INTERESTING("Bison-exception-2.2");
11533  }
11534  if (INFILE(_SPDX_Bootloader_exception)) {
11535  INTERESTING("Bootloader-exception");
11536  }
11537  if (INFILE(_SPDX_Classpath_exception_20)) {
11538  INTERESTING("Classpath-exception-2.0");
11539  }
11540  if (INFILE(_SPDX_CLISP_exception_20)) {
11541  INTERESTING("CLISP-exception-2.0");
11542  }
11543  if (INFILE(_SPDX_DigiRule_FOSS_exception)) {
11544  INTERESTING("DigiRule-FOSS-exception");
11545  }
11546  if (INFILE(_SPDX_eCos_exception_20)) {
11547  INTERESTING("eCos-exception-2.0");
11548  }
11549  if (INFILE(_SPDX_Fawkes_Runtime_exception)) {
11550  INTERESTING("Fawkes-Runtime-exception");
11551  }
11552  if (INFILE(_SPDX_FLTK_exception)) {
11553  INTERESTING("FLTK-exception");
11554  }
11555  if (INFILE(_SPDX_Font_exception_20)) {
11556  INTERESTING("Font-exception-2.0");
11557  }
11558  if (INFILE(_SPDX_freertos_exception_20)) {
11559  INTERESTING("freertos-exception-2.0");
11560  }
11561  if (INFILE(_SPDX_GCC_exception_20)) {
11562  INTERESTING("GCC-exception-2.0");
11563  }
11564  if (INFILE(_SPDX_GCC_exception_31)) {
11565  INTERESTING("GCC-exception-3.1");
11566  }
11567  if (INFILE(_SPDX_gnu_javamail_exception)) {
11568  INTERESTING("gnu-javamail-exception");
11569  }
11570  if (INFILE(_SPDX_i2p_gpl_java_exception)) {
11571  INTERESTING("i2p-gpl-java-exception");
11572  }
11573  if (INFILE(_SPDX_Libtool_exception)) {
11574  INTERESTING("Libtool-exception");
11575  }
11576  if (INFILE(_SPDX_Linux_syscall_note)) {
11577  INTERESTING("Linux-syscall-note");
11578  }
11579  if (INFILE(_SPDX_LLVM_exception)) {
11580  INTERESTING("LLVM-exception");
11581  }
11582  if (INFILE(_SPDX_LZMA_exception)) {
11583  INTERESTING("LZMA-exception");
11584  }
11585  if (INFILE(_SPDX_mif_exception)) {
11586  INTERESTING("mif-exception");
11587  }
11588  if (INFILE(_SPDX_Nokia_Qt_exception_11)) {
11589  INTERESTING("Nokia-Qt-exception-1.1");
11590  }
11591  if (INFILE(_SPDX_OCCT_exception_10)) {
11592  INTERESTING("OCCT-exception-1.0");
11593  }
11594  if (INFILE(_SPDX_OpenJDK_assembly_exception_10)) {
11595  INTERESTING("OpenJDK-assembly-exception-1.0");
11596  }
11597  if (INFILE(_SPDX_openvpn_openssl_exception)) {
11598  INTERESTING("openvpn-openssl-exception");
11599  }
11600  if (INFILE(_SPDX_Qwt_exception_10)) {
11601  INTERESTING("Qwt-exception-1.0");
11602  }
11603  if (INFILE(_SPDX_u_boot_exception_20)) {
11604  INTERESTING("u-boot-exception-2.0");
11605  }
11606  if (INFILE(_SPDX_WxWindows_exception_31)) {
11607  INTERESTING("WxWindows-exception-3.1");
11608  }
11609  /*
11610  * Find exception phrases. There are similar phrases
11611  * in exception clauses. Therefore 'else if' structure
11612  * has to be used to get correct detections.
11613  */
11614  if (INFILE(_LT_389_exception)) {
11615  INTERESTING("389-exception");
11616  }
11617  else if (INFILE(_LT_Autoconf_exception_20)) {
11618  INTERESTING("Autoconf-exception-2.0");
11619  }
11620  else if (INFILE(_LT_GPL_EXCEPT_5) && INFILE(_LT_Autoconf_exception_30)) {
11621  INTERESTING("Autoconf-exception-3.0");
11622  }
11623  else if (INFILE(_PHR_Autoconf_exception_30)) {
11624  INTERESTING("Autoconf-exception-3.0");
11625  }
11626  else if (INFILE(_LT_Autoconf_exception_3)) {
11627  INTERESTING("Autoconf-exception");
11628  }
11629  else if (INFILE(_LT_Bison_exception_22)) {
11630  INTERESTING("Bison-exception-2.2");
11631  }
11632  else if (INFILE(_LT_Bison_exception_1) || INFILE(_LT_Bison_exception_2)) {
11633  INTERESTING("Bison-exception");
11634  }
11635  else if (INFILE(_LT_Bootloader_exception)) {
11636  INTERESTING("Bootloader-exception");
11637  }
11638  /* Contains similar text to classpath-exception */
11639  else if (INFILE(_LT_OpenJDK_assembly_exception_10_1) || HASTEXT(_LT_OpenJDK_assembly_exception_10_2, 0)) {
11640  INTERESTING("OpenJDK-assembly-exception-1.0");
11641  }
11642  else if (INFILE(_LT_GPL_EXCEPT_6)) {
11643  if (INFILE(_LT_mif_exception)) {
11644  INTERESTING("Fawkes-Runtime-exception");
11645  }
11646  else {
11647  INTERESTING("Classpath-exception-2.0");
11648  }
11649  }
11650  else if (INFILE(_LT_classpath_exception_1)) {
11651  INTERESTING("Classpath-exception-2.0");
11652  }
11653  else if (HASTEXT(_LT_CLISP_exception_20_1, 0) && INFILE(_LT_CLISP_exception_20_2)) {
11654  INTERESTING("CLISP-exception-2.0");
11655  }
11656  else if (HASTEXT(_TITLE_DigiRule_FOSS_exception, 0) || INFILE(_LT_DigiRule_FOSS_exception)) {
11657  INTERESTING("DigiRule-FOSS-exception");
11658  }
11659  else if (INFILE(_LT_eCos_exception) && INFILE(_LT_GPL_EXCEPT_7)) {
11660  INTERESTING("eCos-exception-2.0");
11661  }
11662  else if (HASTEXT(_LT_FLTK_exception, 0)) {
11663  INTERESTING("FLTK-exception");
11664  }
11665  else if (HASTEXT(_TEXT_FONT, REG_EXTENDED) || INFILE(_LT_FONT_EXCEPTION_20)) {
11666  INTERESTING("Font-exception-2.0");
11667  }
11668  else if (HASTEXT(_LT_freertos_exception_20, 0)) {
11669  INTERESTING("freertos-exception-2.0");
11670  }
11671  else if (INFILE(_LT_freertos_exception_1) || INFILE(_LT_freertos_exception_2)) {
11672  INTERESTING("freertos-exception");
11673  }
11674  else if (INFILE(_LT_GCC_exception_31_1) || INFILE(_LT_GCC_exception_31_2)) {
11675  INTERESTING("GCC-exception-3.1");
11676  }
11677  else if (INFILE(_LT_GCC_exception_20)) {
11678  INTERESTING("GCC-exception-2.0");
11679  }
11680  /* This wording is very similar to GCC_exception_20 */
11681  else if (INFILE(_LT_linking_exception_1)) {
11682  INTERESTING("linking-exception");
11683  }
11684  else if (HASTEXT(_TEXT_GCC, REG_EXTENDED)) {
11685  INTERESTING("GCC-exception");
11686  }
11687  else if (INFILE(_LT_gnu_javamail_exception_1) || INFILE(_LT_gnu_javamail_exception_2)) {
11688  INTERESTING("gnu-javamail-exception");
11689  }
11690  else if (INFILE(_LT_i2p_gpl_java_exception)) {
11691  INTERESTING("i2p-gpl-java-exception");
11692  }
11693  else if (INFILE(_LT_GPL_EXCEPT_1) || INFILE(_LT_GPL_EXCEPT_2)) {
11694  if (HASTEXT(_LT_Libtool_exception, 0)) {
11695  INTERESTING("Libtool-exception");
11696  }
11697  if (HASTEXT(_LT_Autoconf_exception_2, REG_EXTENDED) || INFILE(_LT_Autoconf_exception_1)) {
11698  INTERESTING("Autoconf-exception");
11699  }
11700  }
11701  else if (INFILE(_LT_Linux_syscall_note)) {
11702  INTERESTING("Linux-syscall-note");
11703  }
11704  else if (HASTEXT(_LT_LLVM_exception_1, 0) || HASTEXT(_LT_LLVM_exception_2, 0)) {
11705  INTERESTING("LLVM-exception");
11706  }
11707  else if (INFILE(_LT_LZMA_exception)) {
11708  INTERESTING("LZMA-exception");
11709  }
11710  else if (INFILE(_LT_mif_exception)) {
11711  INTERESTING("mif-exception");
11712  }
11713  else if (HASTEXT(_LT_OCCT_exception_10_1, REG_EXTENDED) || INFILE(_LT_OCCT_exception_10_2)) {
11714  INTERESTING("OCCT-exception-1.0");
11715  }
11716  else if (INFILE(_LT_openvpn_openssl_exception)) {
11717  INTERESTING("openvpn-openssl-exception");
11718  }
11719  else if (HASTEXT(_TITLE_QT_GPL_EXCEPTION_10, 0)) {
11720  INTERESTING("Qt-GPL-exception-1.0");
11721  }
11722  else if (HASTEXT(_LT_QT_GPL_EXCEPTION_10_1, 0) && INFILE(_LT_QT_GPL_EXCEPTION_10_2)) {
11723  INTERESTING("Qt-GPL-exception-1.0");
11724  }
11725  else if (HASTEXT(_LT_QT_GPL_EXCEPTION, 0) && HASTEXT(_LT_QT_GPL_EXCEPTION_10_3, 0)) {
11726  INTERESTING("Qt-GPL-exception-1.0");
11727  }
11728  else if (INFILE(_TITLE_Nokia_Qt_LGPL_exception_11)) {
11729  INTERESTING("Nokia-Qt-exception-1.1");
11730  }
11731  else if (INFILE(_TITLE_QT_LGPL_EXCEPTION_11)) {
11732  INTERESTING("Qt-LGPL-exception-1.1");
11733  }
11734  else if (INFILE(_LT_Qwt_exception_10_1)) {
11735  INTERESTING("Qwt-exception-1.0");
11736  }
11737  else if (HASTEXT(_LT_Qwt_exception_10_2, 0)) {
11738  INTERESTING("Qwt-exception-1.0");
11739  }
11740  else if (INFILE(_LT_WxWindows_exception_31)) {
11741  INTERESTING("WxWindows-exception-3.1");
11742  }
11743  /*
11744  * Full license text includes reference to LGPL-2.0-only
11745  * exception clause.
11746  */
11747  else if (INFILE(_PHR_WXWINDOWS_31)) {
11748  INTERESTING("WxWindows-exception-3.1");
11749  INTERESTING("LGPL-2.0-or-later");
11750  }
11751  /*
11752  * This is a vague reference to WxWindows license without
11753  * an exception reference.
11754  */
11755  else if (INFILE(_PHR_WXWINDOWS)) {
11756  INTERESTING("WxWindows");
11757  }
11758  else if (HASTEXT(_LT_u_boot_exception_20, REG_EXTENDED)) {
11759  INTERESTING("u-boot-exception-2.0");
11760  }
11761  else if (HASTEXT(_LT_GPL_EXCEPT_Trolltech, REG_EXTENDED)) {
11762  INTERESTING("trolltech-exception");
11763  }
11764  else if (INFILE(_LT_OpenSSL_exception_1) || INFILE(_LT_OpenSSL_exception_2)) {
11765  INTERESTING("OpenSSL-exception");
11766  }
11767  else if (INFILE(_LT_GPL_UPX_EXCEPT) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
11768  INTERESTING("UPX-exception");
11769  }
11770  else if (INFILE(_URL_mysql_floss_exception) || HASTEXT(_TITLE_mysql_floss_exception, 0)) {
11771  INTERESTING(lDebug ? "mysql-floss-exception(URL)" : "mysql-floss-exception");
11772  }
11773  else if (INFILE(_TITLE_Oracle_foss_exception) || INFILE(_LT_Oracle_foss_exception)) {
11774  INTERESTING("Oracle-foss-exception");
11775  }
11776  else if (INFILE(_LT_linking_exception_2) || (INFILE(_LT_linking_exception_3) && INFILE(_LT_GPL_EXCEPT_7))) {
11777  INTERESTING("linking-exception");
11778  }
11779  else if (HASTEXT(_TITLE_universal_foss_exception_10, 0)
11780  || URL_INFILE(_URL_universal_foss_exception_10)
11781  || INFILE(_LT_universal_foss_exception_10)) {
11782  INTERESTING("universal-foss-exception-1.0");
11783  }
11784  else if (INFILE(_LT_GPL_EXCEPT_1)) {
11785  INTERESTING(lDebug ? "GPL-except-1" : "GPL-exception");
11786  }
11787  else if (INFILE(_LT_GPL_EXCEPT_2)) {
11788  INTERESTING(lDebug ? "GPL-except-2" : "GPL-exception");
11789  }
11790  else if (INFILE(_LT_GPL_EXCEPT_3)) {
11791  INTERESTING(lDebug ? "GPL-except-3" : "GPL-exception");
11792  }
11793  else if (INFILE(_LT_GPL_EXCEPT_4)) {
11794  INTERESTING(lDebug ? "GPL-except-4" : "GPL-exception");
11795  }
11796  else if (INFILE(_LT_GPL_EXCEPT_7)) {
11797  INTERESTING("linking-exception");
11798  }
11799  else if (INFILE(_LT_GPL_SWI_PROLOG_EXCEPT)) {
11800  INTERESTING(lDebug ? "GPL-swi-prolog" : "GPL-exception");
11801  }
11802 
11803  return;
11804 }
11805 
11806 #ifdef LTSR_DEBUG
11807 #define LT_TARGET 1299 /* set to -1 OR the string# to track */
11808 void showLTCache(char *msg)
11809 {
11810  int i = 0;
11811  int nCached = 0;
11812  int nMatch = 0;
11813 
11814  printf("%s\n", msg);
11815  if (LT_TARGET >= 0) {
11816  printf("... tracking string #%d\n", LT_TARGET);
11817  }
11818  while (i < NFOOTPRINTS) {
11819  if (ltsr[i] < LTSR_SMASK) {
11820  printf(i == LT_TARGET ? "x" : ".");
11821  } else if (ltsr[i] == LTSR_YES) {
11822  printf("%%");
11823  nMatch++;
11824  nCached++;
11825  } else {
11826  printf(i == LT_TARGET ? "0" : ":");
11827  nCached++;
11828  }
11829  if ((++i % 75) == 0) {
11830  printf("|%04d\n", i);
11831  }
11832  }
11833  printf("\nLTSR-matches: %d, Cached: %d\n", nMatch, nCached);
11834  return;
11835 }
11836 #endif /* LTSR_DEBUG */
11837 
11838 #ifdef DOCTOR_DEBUG
11839 /*
11840  Debugging
11841  */
11842 void dumpMatch(char *text, char *label)
11843 {
11844  char *x = text + cur.regm.rm_so;
11845  char *cp = text + cur.regm.rm_eo;
11846 
11847  if (label) {
11848  printf("%s ", label);
11849  }
11850  printf("@ %d [", cur.regm.rm_so);
11851  for (; x < cp; x++) {
11852  if (!isEOL(*x)) {
11853  printf("%c", *x);
11854  }
11855  }
11856  printf("]\n");
11857  return;
11858 }
11859 
11860 #endif /* DOCTOR_DEBUG */
void doctorBuffer(char *buf, int isML, int isPS, int isCR)
Convert a buffer of multiple stuff to text-only, separated by spaces.
void listDump(list_t *l, int verbose)
print the passed in list
Definition: list.c:829
item_t * listGetItem(list_t *l, char *s)
get an item from the itemlist. If the item is not in the itemlist, then add it to the itemlist.
Definition: list.c:246
void listIterationReset(list_t *l)
Rest list ix to -1.
Definition: list.c:513
void listInit(list_t *l, int size, char *label)
intialize a list, if the list is not empty, empty it (initialize it to zero's).
Definition: list.c:54
item_t * listIterate(list_t *l)
return a pointer to listitem, returns a NULL_ITEM when no more items to return.
Definition: list.c:477
void listSort(list_t *l, int sortType)
Sort the list as per the sortType passed.
Definition: list.c:631
void listClear(list_t *l, int deallocFlag)
Destroy list_t.
Definition: list.c:106
if(!preg_match("/\s$projectGroup\s/", $groups) &&(posix_getgid() !=$gInfo[ 'gid']))
get monk license list of one specified uploadtree_id
Definition: migratetest.php:33
void printRegexMatch(int n, int cached)
CDB – Need to review this code, particularly for the use of an external file (Nomos....
Definition: util.c:986
char * getInstances(char *textp, int size, int nBefore, int nAfter, char *regex, int recordOffsets)
Get occurrence of a regex in a given string pointer.
Definition: util.c:630
char * copyString(char *s, char *label)
Create a copy of a string.
Definition: util.c:593
void Assert(int fatalFlag, const char *fmt,...)
Raise an assert.
Definition: util.c:1395
char * findEol(char *s)
Find first ROL in a string.
Definition: util.c:378
licText_t licText[]
Nomos header file.
#define NULL_ITEM
NULL item.
Definition: nomos.h:231
#define memFree(x, y)
Definition: nomos.h:531
#define NULL_STR
NULL string.
Definition: nomos.h:235
#define _SEED(x)
Definition: nomos.h:451
#define _REGEX(x)
Definition: nomos.h:447
#define isEOL(x)
Check if x points to a EOL character.
Definition: nomos.h:240
#define YES
Definition: nomos.h:175
#define LTSR_RMASK
Definition: nomos.h:196
#define LTSR_NO
Definition: nomos.h:199
#define NO
Definition: nomos.h:171
#define LTSR_SMASK
Definition: nomos.h:197
void Bail(int exitval)
Close connections and exit.
Definition: nomos_utils.c:537
#define FL_SAVEBASE
Definition: nomos.h:155
#define NULL_CHAR
NULL character.
Definition: nomos.h:234
#define LTSR_YES
Definition: nomos.h:198
#define OPTS_DEBUG
Definition: nomos.h:138
int optionIsSet(int val)
Check if an CLI option is set.
Definition: nomos_utils.c:564
int idxGrep_recordPosition(int index, char *data, int flags)
compile a regex, perform the search and record findings
Definition: nomos_regex.c:220
int idxGrep(int index, char *data, int flags)
compile a regex, and perform the search (on data?)
Definition: nomos_regex.c:205
int strGrep(char *regex, char *data, int flags)
General-purpose grep function, used for one-time-only searches.
Definition: nomos_regex.c:139
int idxGrep_recordPositionDoctored(int index, char *data, int flags)
compile a regex, perform the search and record findings
Definition: nomos_regex.c:241
int strNbuf(char *data, char *str)
Check if a string exists in buffer (case insensitive)
Definition: nomos_regex.c:528
void cleanLicenceBuffer()
Clean the license buffer.
Definition: nomos_utils.c:1015
FUNCTION void addLicence(GArray *theMatches, char *licenceName)
Add a license to the matches array.
Definition: nomos_utils.c:1000
#define NY_INFILE(x)
Calls fileHasPatt() with qType 4.
Definition: parse.c:196
#define URL_INFILE(x)
Check in file with qType 0|1.
Definition: parse.c:202
char * aslVersion(char *, int, int, int)
Check for ASL Apache versions.
Definition: parse.c:7445
static char licStr[myBUFSIZ]
Definition: parse.c:164
#define RM_INFILE(x)
Calls fileHasPatt() with qType 1.
Definition: parse.c:193
void addRef(char *, int)
This function fills in a character-buffer for a license of a CURRENT file being evaluated,...
Definition: parse.c:9532
char * pythonVersion(char *, int, int, int)
Check for python versions.
Definition: parse.c:7796
char * gfdlVersion(char *, int, int, int)
Check for GFDL versions.
Definition: parse.c:8155
static int lDebug
Definition: parse.c:179
static int lDiags
Definition: parse.c:180
void checkCornerCases(char *, int, int, int, int, int, int, int)
If we call this function, we still don't know anything about a license.
Definition: parse.c:10201
#define HASREGEX(x, cp)
Calls idxGrep()
Definition: parse.c:199
#define PARSE_ARGS
Arguments to parse.
Definition: parse.c:188
#define SEEN(x)
Check LTSR_SMASK on lstr[x].
Definition: parse.c:190
char * cplVersion(char *, int, int, int)
Check for CPL versions.
Definition: parse.c:8509
#define NOT_INFILE(x)
Calls fileHasPatt()
Definition: parse.c:192
int findPhrase(int, char *, int, int, int, int)
Check for the presence of a phrase in a file by first searching for the search key provided.
Definition: parse.c:8709
char * parseLicenses(char *filetext, int size, scanres_t *scp, int isML, int isPS)
Parse a file to check all the possible licenses and add them to matches.
Definition: parse.c:359
static char * sisslVersion(char *, int, int, int)
Check for SISSL versions.
Definition: parse.c:7418
static char * gplVersion(char *, int, int, int)
Check for GPL versions.
Definition: parse.c:8330
char * lpplVersion(char *, int, int, int)
Check for LPPL versions.
Definition: parse.c:7971
#define HASTEXT(x, fl)
Calls idxGrep_recordIndex()
Definition: parse.c:201
char * oslVersion(char *, int, int, int)
Check for OSL versions.
Definition: parse.c:7891
void checkFileReferences(char *, int, int, int, int, int)
Generic license-phrases referring to other files or running commands.
Definition: parse.c:9867
static int dbgIdxGrep(int, char *, int)
Debugging call for idxGrep()
Definition: parse.c:316
static struct @1 kludge
void saveRegexLocation(int, int, int, int)
Save a regex in whereList.
Definition: parse.c:9480
#define INFILE(x)
Calls fileHasPatt()
Definition: parse.c:191
int checkUnclassified(char *, int, int, int, int, int)
This function is called when all the above license-checks don't turn up anything useful....
Definition: parse.c:9720
void locateRegex(char *, item_t *, int, int, int, int)
Locate a regex in a given file.
Definition: parse.c:9199
#define HASREGEX_RI(x, cp)
Calls idxGrep_recordIndex()
Definition: parse.c:200
char * cddlVersion(char *, int, int, int)
Check for CDDL versions.
Definition: parse.c:7931
int famOPENLDAP(char *, int, int, int)
Utility function to search for OpenLDAP licenses. So many different footprints are used by OpenLDAP,...
Definition: parse.c:9618
char * lgplVersion(char *, int, int, int)
Check for LGPL versions.
Definition: parse.c:8221
static int fileHasPatt(int licTextIdx, char *filetext, int size, int isML, int isPS, int qType)
Checks for a phrase in a file.
Definition: parse.c:248
static char ltsr[NFOOTPRINTS]
Definition: parse.c:166
char * aflVersion(char *, int, int, int)
Check for AFL versions.
Definition: parse.c:7851
void spdxReference(char *, int, int, int)
Definition: parse.c:10488
void copyleftExceptions(char *, int, int, int)
Definition: parse.c:11520
char * ccVersion(char *, int, int, int)
Check for CC_BY-X versions.
Definition: parse.c:8540
char * agplVersion(char *, int, int, int)
Check for AGPL versions.
Definition: parse.c:8077
char * mplNplVersion(char *, int, int, int)
Check for MPL|NPL versions.
Definition: parse.c:7629
#define PERL_INFILE(x)
Calls fileHasPatt() with qType 3.
Definition: parse.c:195
static char * realVersion(char *, int, int, int, int)
Check for RPSL versions.
Definition: parse.c:7746
#define GPL_INFILE(x)
Calls fileHasPatt() with qType 2.
Definition: parse.c:194
static int pd
Definition: parse.c:175
#define LVAL(x)
Check LTSR_RMASK on lstr[x].
Definition: parse.c:189
start($application)
start the application Assumes application is restartable via /etc/init.d/<script>....
Definition: pkgConfig.php:1214
GArray * theMatches
Definition: nomos.h:417
int uPsize
Size.
Definition: nomos.h:349
int flags
Flags.
Definition: nomos.h:348
char progName[64]
Program name.
Definition: nomos.h:346
searchString_t text
License text.
Definition: nomos.h:335
char * regex
License regex.
Definition: nomos.h:435
char * tseed
unencrypted license text
Definition: nomos.h:436
list_t type structure used to keep various lists. (e.g. there are multiple lists).
Definition: nomos.h:308
item_t * items
Definition: nomos.h:317
int used
Definition: nomos.h:310
tricky data structure used for a list of 'items'
Definition: nomos.h:274
void * buf
Definition: nomos.h:279
char * str
Definition: nomos.h:278
int score
License match score.
Definition: nomos.h:457
int csLen
String length.
Definition: nomos.h:325