FOSSology  4.7.1
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(_LT_BSD_NUMPY_TERMS)) {
979  INTERESTING("BSD-3-Clause");
980  }
981  else if (INFILE(_PHR_BSD_3_CLAUSE_LBNL)) {
982  INTERESTING("BSD-3-Clause-LBNL");
983  }
984  else if (INFILE(_SPDX_BSD_Protection)) {
985  INTERESTING("BSD-Protection");
986  }
987  else if (INFILE(_SPDX_BSD_Source_Code)) {
988  INTERESTING("BSD-Source-Code");
989  }
990  else if (INFILE(_SPDX_BSD_1_Clause)) {
991  INTERESTING("BSD-1-Clause");
992  }
993  else if (INFILE(_PHR_0BSD)) {
994  INTERESTING("0BSD");
995  }
996  else if (INFILE(_LT_BSDref1)) {
997  INTERESTING(lDebug ? "BSD(ref1)" : "BSD");
998  }
999  else if (INFILE(_LT_BSDref2)) {
1000  INTERESTING(lDebug ? "BSD(ref2)" : "BSD");
1001  }
1002  else if (INFILE(_LT_BSDref3)) {
1003  INTERESTING(lDebug ? "BSD(ref3)" : "BSD");
1004  }
1005  else if (INFILE(_LT_BSDref4)) {
1006  INTERESTING(lDebug ? "BSD(ref4)" : "BSD");
1007  }
1008  else if (INFILE(_LT_BSDref5)) {
1009  INTERESTING(lDebug ? "BSD(ref5)" : "BSD");
1010  }
1011  else if (INFILE(_LT_BSDref6)) {
1012  INTERESTING(lDebug ? "BSD(ref6)" : "BSD");
1013  }
1014  else if (INFILE(_LT_BSDref7)) {
1015  INTERESTING(lDebug ? "BSD(ref7)" : "BSD");
1016  }
1017  else if (INFILE(_LT_BSDref8)) {
1018  INTERESTING(lDebug ? "BSD(ref8)" : "BSD");
1019  }
1020  else if (INFILE(_LT_BSDref9)) {
1021  INTERESTING(lDebug ? "BSD(ref9)" : "BSD");
1022  }
1023  else if (INFILE(_LT_BSDref10)) {
1024  INTERESTING(lDebug ? "BSD(ref10)" : "BSD");
1025  }
1026  else if (INFILE(_LT_BSDref11)) {
1027  INTERESTING(lDebug ? "BSD(ref11)" : "BSD");
1028  }
1029  else if (INFILE(_LT_BSDref12) || HASTEXT(_LT_BSDref13, REG_EXTENDED)) {
1030  INTERESTING(lDebug ? "BSD(ref12)" : "BSD-3-Clause");
1031  }
1032  else if (URL_INFILE(_URL_BSD_1) || URL_INFILE(_URL_BSD_2)) {
1033  INTERESTING(lDebug ? "BSD(url)" : "BSD");
1034  lmem[_fBSD] = 1;
1035  }
1036  else if (INFILE(_LT_BSDref14)) {
1037  INTERESTING(lDebug ? "BSD(ref14)" : "BSD");
1038  lmem[_fBSD] = 1;
1039  }
1040  else if (INFILE(_LT_BSDref15)) {
1041  INTERESTING(lDebug ? "BSD(ref15)" : "BSD");
1042  lmem[_fBSD] = 1;
1043  }
1044  else if (INFILE(_LT_BSDSTYLEref1)) {
1045  INTERESTING(lDebug ? "BSD-st(1)" : "BSD-style");
1046  lmem[_fBSD] = 1;
1047  }
1048  else if (INFILE(_LT_BSDSTYLEref2)) {
1049  INTERESTING(lDebug ? "BSD-st(2)" : "BSD-style");
1050  lmem[_fBSD] = 1;
1051  }
1052  else if (INFILE(_LT_BSDSTYLEref4)) {
1053  INTERESTING(lDebug ? "BSD-st(4)" : "BSD-style");
1054  lmem[_fBSD] = 1;
1055  }
1056  else if (INFILE(_LT_BSDSTYLEref3)) {
1057  INTERESTING(lDebug ? "BSD-st(3)" : "BSD-style");
1058  lmem[_fBSD] = 1;
1059  }
1060  else if (INFILE(_LT_BSD_HTMLAREA_1) || INFILE(_LT_BSD_HTMLAREA_2)) {
1061  INTERESTING(lDebug ? "BSD-htmlArea" : "BSD-3-Clause");
1062  lmem[_fBSD] = 1;
1063  }
1064  else if (INFILE(_FILE_BSD1) || INFILE(_FILE_BSD2)) {
1065  INTERESTING(lDebug ? "BSD(deb)" : "BSD");
1066  }
1067  else if (INFILE(_CR_BSD_PERSONAL)) {
1068  INTERESTING("BSD");
1069  }
1071  /*
1072  * Aptana public license (based on MPL)
1073  */
1074  if (INFILE(_LT_APTANA)) {
1075  if (INFILE(_TITLE_APTANA_V10)) {
1076  INTERESTING("Aptana-1.0");
1077  }
1078  else {
1079  INTERESTING("Aptana");
1080  }
1081  lmem[_mMPL] = 1;
1082  lmem[_mAPTANA] = 1;
1083  }
1084  /*
1085  * PHP variants
1086  */
1087  if (!lmem[_mPHP] && INFILE(_LT_PHP)) {
1088  if (INFILE(_TITLE_PHP301)) {
1089  INTERESTING(lDebug ? "PHP(v3.01#2)" : "PHP-3.01");
1090  }
1091  else if (INFILE(_TITLE_PHP30)) {
1092  INTERESTING(lDebug ? "PHP(v3.0#2)" : "PHP-3.0");
1093  }
1094  else if (INFILE(_TITLE_PHP202)) {
1095  INTERESTING(lDebug ? "PHP(v2.02#3)" : "PHP-2.02");
1096  }
1097  else if (INFILE(_CR_PHP)) {
1098  INTERESTING(lDebug ? "PHP(1)" : "PHP");
1099  }
1100  else {
1101  INTERESTING("PHP-style");
1102  }
1103  lmem[_mPHP] = 1;
1104  }
1105  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V301_1)) {
1106  INTERESTING("PHP-3.01");
1107  lmem[_mPHP] = 1;
1108  }
1109  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V30_1)) {
1110  INTERESTING("PHP-3.0");
1111  lmem[_mPHP] = 1;
1112  }
1113  else if (!lmem[_mPHP] && INFILE(_LT_PHP_V30_2)) {
1114  INTERESTING("PHP-3.0");
1115  lmem[_mPHP] = 1;
1116  }
1117  else if (!lmem[_mPHP] && INFILE(_LT_PHPref1)) {
1118  if (INFILE(_PHR_PHP_V301)) {
1119  INTERESTING(lDebug ? "PHP(ref-3.01)" : "PHP-3.01");
1120  }
1121  else if (INFILE(_PHR_PHP_V20)) {
1122  INTERESTING(lDebug ? "PHP(ref-2.0)" : "PHP-2.0");
1123  }
1124  else {
1125  INTERESTING(lDebug ? "PHP(ref)" : "PHP");
1126  }
1127  lmem[_mPHP] = 1;
1128  }
1129  else if (!lmem[_mPHP] && URL_INFILE(_URL_PHP)) {
1130  INTERESTING(lDebug ? "PHP(url)" : "PHP");
1131  lmem[_mPHP] = 1;
1132  }
1133  else if (INFILE(_LT_PHP_ref)) {
1134  INTERESTING(lDebug ? "PHP(2)" : "PHP");
1135  lmem[_mPHP] = 1;
1136  }
1138  /*
1139  * Licenses between here and all the GPL/LGPL/GFDL/FSF checks (below) MUST
1140  * be tested PRIOR to checking GPL/FSF and friends
1141  */
1142  if ((INFILE(_CR_EASYSW) || INFILE(_TITLE_CUPS)) && INFILE(_LT_CUPS)) {
1143  if (INFILE(_LT_CUPS_COMMERCIAL)) {
1144  INTERESTING("CUPS-EULA");
1145  }
1146  else {
1147  INTERESTING("CUPS");
1148  }
1149  lmem[_mCUPS] = 1;
1150  }
1152  if (INFILE(_LT_HACKTIVISMO)) {
1153  INTERESTING("Hacktivismo");
1154  lmem[_mGPL] = 1; /* don't look for GPL references */
1155  }
1157  if (INFILE(_LT_NESSUS) && INFILE(_TITLE_NESSUS)) {
1158  INTERESTING("NESSUS-EULA");
1159  lmem[_mLGPL] = 1; /* don't look for LGPL references */
1160  lmem[_mGPL] = 1;
1161  }
1163  /*
1164  * Oracle
1165  */
1166  if (INFILE(_LT_ORACLE_PROTO) && INFILE(_TITLE_ORACLE_PROTO)) {
1167  INTERESTING(lDebug ? "Oracle(proto)" : "Oracle-EULA");
1168  lmem[_mGPL] = 1;
1169  }
1170  else if (INFILE(_LT_ORACLE_DEVEL) && INFILE(_TITLE_ORACLE_DEVEL)) {
1171  INTERESTING(lDebug ? "Oracle(dev)" : "Oracle-Dev");
1172  }
1173  else if (URL_INFILE(_URL_ORACLE_BERKELEY_DB)) {
1174  INTERESTING(lDebug ? "URL_ORACLE_BERKELEY_DB" : "Oracle-Berkeley-DB");
1175  }
1177  /*
1178  * DB License
1179  */
1180  if (INFILE(_LT_DATABRICKS_RESTRICTED)) {
1181  INTERESTING("Databricks-DB-License");
1182  }
1184  /*
1185  * CeCILL
1186  * According to digikam-0.9.4/digikam/libs/greycstoration/CImg.h:
1187  * The CeCILL-C (C_V1) license is close to the GNU LGPL
1188  * The CeCILL (V2.0) license is compatible with the GNU GPL
1189  */
1190  if (INFILE(_TITLE_CECILL_V11_2) || INFILE(_SPDX_CECILL_11)) {
1191  INTERESTING(lDebug ? "CeCILL_v1.1(#2)" : "CECILL-1.1");
1192  lmem[_mGPL] = lmem[_mLGPL] = 1;
1193  }
1194  else if (INFILE(_TITLE_CECILL_B) || INFILE(_TITLE_CECILL_B1) || INFILE(_SPDX_CECILL_B)) {
1195  INTERESTING("CECILL-B");
1196  }
1197  else if (INFILE(_TITLE_CECILL_C) || INFILE(_TITLE_CECILL_C1) || INFILE(_SPDX_CECILL_C)) {
1198  INTERESTING("CECILL-C");
1199  }
1200  else if (INFILE(_LT_CECILL_DUALref)) {
1201  INTERESTING("CECILL(dual)");
1202  lmem[_mGPL] = lmem[_mLGPL] = 1;
1203  }
1204  else if (INFILE(_SPDX_CECILL_10)) {
1205  INTERESTING("CECILL-1.0");
1206  }
1207  else if (INFILE(_SPDX_CECILL_21)) {
1208  INTERESTING("CECILL-2.1");
1209  }
1210  else if (INFILE(_LT_CECILL_2_ref) || INFILE(_SPDX_CECILL_20)) {
1211  INTERESTING("CECILL-2.0");
1212  }
1213  else if (INFILE(_LT_CECILL_ref2)) {
1214  INTERESTING("CECILL");
1215  }
1216  else if (INFILE(_LT_CECILL_B_ref)) {
1217  INTERESTING("CECILL-B");
1218  }
1219  else if (INFILE(_LT_CECILL_ref) || INFILE(_LT_CECILL_ref1)) {
1220  if (URL_INFILE(_URL_CECILL_C_V11)) {
1221  INTERESTING(lDebug ? "CeCILL_v1.1(url)" : "CECILL-1.1");
1222  }
1223  else if (URL_INFILE(_URL_CECILL_C_V1)) {
1224  INTERESTING(lDebug ? "CeCILL_v1(url)" : "CECILL-1.0");
1225  }
1226  else if (URL_INFILE(_URL_CECILL_V2)) {
1227  INTERESTING(lDebug ? "CeCILL_v2(url)" : "CECILL-2.0");
1228  }
1229  else if (URL_INFILE(_URL_CECILL)) {
1230  INTERESTING(lDebug ? "CeCILL(url)" : "CECILL");
1231  }
1232  else {
1233  INTERESTING(lDebug ? "CeCILL(#3)" : "CECILL");
1234  }
1235  lmem[_mGPL] = 1;
1236  }
1237  else if (INFILE(_LT_CECILL_1)) {
1238  if (INFILE(_TITLE_CECILL_V10)) {
1239  INTERESTING(lDebug ? "CeCILL_v1.0(#1)" : "CECILL-1.0");
1240  }
1241  else if (INFILE(_TITLE_CECILL_V20)) {
1242  INTERESTING(lDebug ? "CeCILL_v2.0(#1)" : "CECILL-2.0");
1243  }
1244  lmem[_mGPL] = 1;
1245  }
1246  else if (INFILE(_LT_CECILL_2) || INFILE(_TITLE_CECILL1) || INFILE(_TITLE_CECILL2)) {
1247  if (INFILE(_TITLE_CECILL_V10)) {
1248  INTERESTING(lDebug ? "CeCILL_v1.0(#2)" : "CECILL-1.0");
1249  }
1250  else if (INFILE(_TITLE_CECILL_V11)) {
1251  INTERESTING(lDebug ? "CeCILL_v1.1(#1)" : "CECILL-1.1");
1252  }
1253  else if (INFILE(_TITLE_CECILL_V20)) {
1254  INTERESTING(lDebug ? "CeCILL_v2.0(#2)" : "CECILL-2.0");
1255  }
1256  else {
1257  INTERESTING(lDebug ? "CeCILL(#2)" : "CECILL");
1258  }
1259  lmem[_mGPL] = 1;
1260  }
1262  /*
1263  * Monash University
1264  */
1265  if (INFILE(_CR_UMONASH) && INFILE(_LT_UMONASH)) {
1266  INTERESTING("U-Monash");
1267  if (INFILE(_PHR_GPL_NO_MORE)) {
1268  lmem[_mGPL] = 1;
1269  }
1270  }
1272  /* Open Font License */
1273  if (INFILE(_LT_OPEN_FONT_V10) || INFILE(_LT_OPEN_FONT_V10_1))
1274  {
1275  INTERESTING("OFL-1.0");
1276  lmem[_fOFL] = 1;
1277  }
1278  else if (INFILE(_SPDX_OFL_10_no_RFN)) {
1279  INTERESTING("OFL-1.0-no-RFN");
1280  }
1281  else if (INFILE(_SPDX_OFL_10_RFN)) {
1282  INTERESTING("OFL-1.0-RFN");
1283  }
1284  else if (INFILE(_SPDX_OFL_10)) {
1285  INTERESTING("OFL-1.0");
1286  }
1287  else if (INFILE(_PHR_OPEN_FONT_V10_1) || INFILE(_PHR_OPEN_FONT_V10_2))
1288  {
1289  INTERESTING("OFL-1.0");
1290  lmem[_fOFL] = 1;
1291  }
1292  else if (INFILE(_LT_OPEN_FONT_V11) || INFILE(_LT_OPEN_FONT_V11_1))
1293  {
1294  INTERESTING("OFL-1.1");
1295  lmem[_fOFL] = 1;
1296  }
1297  else if (INFILE(_SPDX_OFL_11_no_RFN)) {
1298  INTERESTING("OFL-1.1-no-RFN");
1299  }
1300  else if (INFILE(_SPDX_OFL_11_RFN)) {
1301  INTERESTING("OFL-1.1-RFN");
1302  }
1303  else if (INFILE(_SPDX_OFL_11)) {
1304  INTERESTING("OFL-1.1");
1305  }
1306  else if (INFILE(_PHR_OPEN_FONT_V11_1) || INFILE(_PHR_OPEN_FONT_V11_2))
1307  {
1308  INTERESTING("OFL-1.1");
1309  lmem[_fOFL] = 1;
1310  }
1312  /* Simple Public License 2.0 */
1313  if (INFILE(_TITLE_SimPL_V2)) {
1314  INTERESTING("SimPL-2.0");
1315  lmem[_mGPL] = 1;
1316  }
1318  /* Leptonica license */
1319  if (INFILE(_TITLE_LEPTONICA) && INFILE(_LT_GNU_3)) {
1320  INTERESTING("Leptonica");
1321  }
1323  /* copyleft-next license
1324  * It has to be checked before GPL because the license has the reference
1325  * to GPL license which gives a false positive GPL finding.
1326  */
1327  if (INFILE(_TITLE_copyleft_next_030) && INFILE(_PHR_copyleft_next_PARA1) && INFILE(_PHR_copyleft_next_PARA3)) {
1328  INTERESTING("copyleft-next-0.3.0");
1329  lmem[_mGPL] = 1;
1330  }
1331  else if (INFILE(_TITLE_copyleft_next_031) && INFILE(_PHR_copyleft_next_PARA1) && INFILE(_PHR_copyleft_next_PARA3)) {
1332  INTERESTING("copyleft-next-0.3.1");
1333  lmem[_mGPL] = 1;
1334  }
1335  else if (INFILE(_PHR_copyleft_next_030) || INFILE(_SPDX_copyleft_next_030)) {
1336  INTERESTING("copyleft-next-0.3.0");
1337  }
1338  else if (INFILE(_PHR_copyleft_next_031) || INFILE(_SPDX_copyleft_next_031)) {
1339  INTERESTING("copyleft-next-0.3.1");
1340  }
1342  /*
1343  * GPL, LGPL, GFDL
1344  * QUESTION: do we need to check for the FSF copyright since we also
1345  * check for "GNU" or "free"?
1346  */
1347  if ((NOT_INFILE(_LT_FORMER_GNU) && (mCR_FSF() ||
1348  HASTEXT(_TEXT_GNUTERMS, REG_EXTENDED)))) {
1349  /*
1350  * Affero
1351  */
1352  if (INFILE(_PHR_AGPL) && NOT_INFILE(_LT_GPL3ref4)) {
1353  if (INFILE(_LT_AGPL1) || INFILE(_LT_AGPL2) ||
1354  INFILE(_LT_AGPL3)) {
1355  cp = AGPLVERS();
1356  INTERESTING(lDebug ? "Affero(#1)" : cp);
1357  lmem[_mGPL] = 1;
1358  }
1359  else if (INFILE(_LT_AGPLref1)) {
1360  cp = AGPLVERS();
1361  INTERESTING(lDebug ? "Affero(#2)" : cp);
1362  lmem[_mGPL] = 1;
1363  }
1364  else if (INFILE(_LT_AGPLref2) && NOT_INFILE(_LT_NOT_AGPLref1)) {
1365  cp = AGPLVERS();
1366  INTERESTING(lDebug ? "Affero(#3)" : cp);
1367  lmem[_mGPL] = 1;
1368  }
1369  else if (mCR_FSF() && NOT_INFILE(_LT_GPL3_NOT_AGPL)) {
1370  cp = AGPLVERS();
1371  INTERESTING(lDebug ? "Affero(CR)" : cp);
1372  lmem[_mGPL] = 1;
1373  }
1374  }
1375  else if (INFILE(_LT_AGPL_NAMED)) {
1376  cp = AGPLVERS();
1377  INTERESTING(lDebug ? "AGPL(named)" : cp);
1378  lmem[_mGPL] = 1;
1379  }
1380 
1381  /*
1382  * Some packages have a single file containing both a GPL and an LGPL
1383  * license. Therefore, these checks should NOT be exclusive.
1384  */
1385  /* * The Nethack General Public License (NGPL) */
1386  else if (INFILE(_TITLE_NGPL)) {
1387  INTERESTING("NGPL");
1388  lmem[_mGPL] = 1;
1389  }
1390  else if (INFILE(_LT_GPL_V1)) {
1391  INTERESTING("GPL-1.0-only");
1392  lmem[_mGPL] = 1;
1393  }
1394  else if (INFILE(_LT_GPL_1) && !HASTEXT(_LT_GPL_EXCEPT_0, REG_EXTENDED)) {
1395  if (INFILE(_PHR_GPL2_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1396  {
1397  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#1)" : "GPL-2.0-or-later");
1398  lmem[_mGPL] = 1;
1399  }
1400  else if (INFILE(_TITLE_GPL2)) {
1401  INTERESTING(lDebug ? "Title(GPL-2.0-only)" : "GPL-2.0-only");
1402  lmem[_mGPL] = 1;
1403  }
1404  else if (INFILE(_PHR_GPL1_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1405  {
1406  INTERESTING("GPL-1.0-or-later");
1407  lmem[_mGPL] = 1;
1408  }
1409  else if (INFILE(_TITLE_GPL1)) {
1410  INTERESTING("GPL-1.0-only");
1411  lmem[_mGPL] = 1;
1412  }
1413  else {
1414  INTERESTING("GPL");
1415  lmem[_mGPL] = 1;
1416  }
1417  }
1418  else if ((INFILE(_LT_GPL_V2) || INFILE(_LT_GPL_V2_ref) || INFILE(_LT_GPL_V2_ref1) || INFILE(_LT_GPL_V2_ref2) || INFILE(_LT_GPL_V2_as_published)) && !HASTEXT(_LT_GPL_EXCEPT_0, REG_EXTENDED)) {
1419  if (INFILE(_PHR_GPL2_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1420  {
1421  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#2)" : "GPL-2.0-or-later");
1422  lmem[_mGPL] = 1;
1423  }
1424  else {
1425  INTERESTING(lDebug ? "LT(GPL-V2)" : "GPL-2.0-only");
1426  lmem[_mGPL] = 1;
1427  }
1428  }
1429  else if (INFILE(_PHR_GPL2_OR_LATER_2))
1430  {
1431  INTERESTING(lDebug ? "PHR(GPL2_OR_LATER#2)" : "GPL-2.0-or-later");
1432  lmem[_mGPL] = 1;
1433  }
1434  else if (INFILE(_LT_GPL3_PATENTS)) {
1435  if (INFILE(_TITLE_GPL3)) {
1436  INTERESTING(lDebug ? "GPL_v3(#1)" : "GPL-3.0-only");
1437  lmem[_mGPL] = 1;
1438  }
1439  else {
1440  INTERESTING("GPL-3.0-only-possibility");
1441  lmem[_mGPL] = 1;
1442  }
1443  }
1444  else if (INFILE(_TITLE_GPL3_ref3_later)) {
1445  INTERESTING("GPL-3.0-or-later");
1446  lmem[_mGPL] = 1;
1447  }
1448  else if (INFILE(_TITLE_GPL3_ref4_later)) {
1449  INTERESTING("GPL-3.0-or-later");
1450  lmem[_mGPL] = 1;
1451  }
1452  else if (INFILE(_TITLE_GPL3_ref3)) {
1453  INTERESTING("GPL-3.0-only");
1454  lmem[_mGPL] = 1;
1455  }
1456  if (INFILE(_LT_LGPL_1) || INFILE(_LT_LGPL_2) || INFILE(_LT_LGPL21_OR_LATER_GENERAL)) {
1457  if (INFILE(_PHR_LGPL21_OR_LATER_1) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1458  {
1459  INTERESTING("LGPL-2.1-or-later");
1460  lmem[_mLGPL] = 1;
1461  }
1462  else if (INFILE(_PHR_LGPL2_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1463  {
1464  INTERESTING("LGPL-2.0-or-later");
1465  lmem[_mLGPL] = 1;
1466  }
1467  else if (INFILE(_TITLE_LGPLV21)) {
1468  INTERESTING("LGPL-2.1-only");
1469  lmem[_mLGPL] = 1;
1470  }
1471  else if (INFILE(_TITLE_LGPLV2)) {
1472  INTERESTING("LGPL-2.0-only");
1473  lmem[_mLGPL] = 1;
1474  }
1475  else {
1476  INTERESTING("LGPL");
1477  lmem[_mLGPL] = 1;
1478  }
1479  }
1480  else if (INFILE(_LT_LGPL_3)) {
1481  if ((INFILE(_PHR_LGPL3_OR_LATER)
1482  || INFILE(_PHR_LGPL3_OR_LATER_ref1)
1483  || INFILE(_PHR_LGPL3_OR_LATER_ref2))
1484  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1485  {
1486  INTERESTING("LGPL-3.0-or-later");
1487  lmem[_mLGPL] = 1;
1488  }
1489  else if (INFILE(_TITLE_LGPL3)) {
1490  INTERESTING("LGPL-3.0-only");
1491  lmem[_mLGPL] = 1;
1492  }
1493  else {
1494  INTERESTING("LGPL-3.0-only-possibility");
1495  lmem[_mLGPL] = 1;
1496  }
1497  }
1498  if (INFILE(_LT_GFDL)) {
1499  cp = GFDLVERS();
1500  INTERESTING(lDebug ? "GFDL(#1)" : cp);
1501  lmem[_mGFDL] = 1;
1502  }
1503  if (!lmem[_mLGPL] && NOT_INFILE(_LT_MPL_SECONDARY)) { /* no FSF/GPL-like match yet */
1504  /*
1505  NOTE: search for LGPL before GPL; the latter matches
1506  occurrences of former
1507  */
1508  if (INFILE(_LT_GPL_FONT1) && INFILE(_LT_GPL_FONT2)) {
1509  INTERESTING(lDebug ? "GPL(fonts)" : "GPL-exception");
1510  lmem[_mGPL] = 1;
1511  }
1512  else if (INFILE(_LT_LGPL_ALT)) {
1513  cp = LGPLVERS();
1514  INTERESTING(lDebug ? "LGPL(alternate)" : cp);
1515  lmem[_mLGPL] = 1;
1516  }
1517  else if (INFILE(_LT_LGPL3_ref_later)) {
1518  INTERESTING("LGPL-3.0-or-later");
1519  lmem[_mLGPL] = 1;
1520  }
1521  else if (INFILE(_LT_LGPLref1)) {
1522  cp = LGPLVERS();
1523  INTERESTING(lDebug ? "LGPL(ref1)" : cp);
1524  lmem[_mLGPL] = 1;
1525  }
1526  else if (INFILE(_LT_LGPLref2) &&
1527  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1528  cp = LGPLVERS();
1529  INTERESTING(lDebug ? "LGPL(ref2#1)" : cp);
1530  lmem[_mLGPL] = 1;
1531  }
1532  else if (INFILE(_LT_LGPLref3)) {
1533  cp = LGPLVERS();
1534  INTERESTING(lDebug ? "LGPL(ref3)" : cp);
1535  lmem[_mLGPL] = 1;
1536  }
1537  else if (INFILE(_LT_LGPLref4)) {
1538  cp = LGPLVERS();
1539  INTERESTING(lDebug ? "LGPL(ref4)" : cp);
1540  lmem[_mLGPL] = 1;
1541  }
1542  else if (INFILE(_LT_LGPLref5)) {
1543  cp = LGPLVERS();
1544  INTERESTING(lDebug ? "LGPL(ref5)" : cp);
1545  lmem[_mLGPL] = 1;
1546  }
1547  else if (INFILE(_LT_LGPLref6)) {
1548  cp = LGPLVERS();
1549  INTERESTING(lDebug ? "LGPL(ref6)" : cp);
1550  lmem[_mLGPL] = 1;
1551  }
1552  else if (!lmem[_mLIBRE] && !lmem[_fREAL] &&
1553  INFILE(_LT_LGPLref7) &&
1554  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1555  cp = LGPLVERS();
1556  INTERESTING(lDebug ? "LGPL(ref7)" : cp);
1557  lmem[_mLGPL] = 1;
1558  }
1559  else if (!lmem[_fREAL] && !lmem[_mAPTANA] &&
1560  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_LGPLref8) &&
1561  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1562  cp = LGPLVERS();
1563  INTERESTING(lDebug ? "LGPL(ref8)" : cp);
1564  lmem[_mLGPL] = 1;
1565  }
1566  else if (INFILE(_LT_LGPLref9) &&
1567  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1568  cp = LGPLVERS();
1569  INTERESTING(lDebug ? "LGPL(ref9)" : cp);
1570  lmem[_mLGPL] = 1;
1571  }
1572  else if (INFILE(_LT_LGPLref10) &&
1573  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1574  cp = LGPLVERS();
1575  INTERESTING(lDebug ? "LGPL(ref10)" : cp);
1576  lmem[_mLGPL] = 1;
1577  }
1578  else if (INFILE(_LT_LGPLref11)) {
1579  cp = LGPLVERS();
1580  INTERESTING(lDebug ? "LGPL(ref11)" : cp);
1581  lmem[_mLGPL] = 1;
1582  }
1583  else if (INFILE(_FILE_LGPL1) || INFILE(_FILE_LGPL2)) {
1584  cp = LGPLVERS();
1585  INTERESTING(lDebug ? "LGPL(deb)" : cp);
1586  lmem[_mLGPL] = 1;
1587  }
1588  else if (!LVAL(_TEXT_GNU_LIC_INFO) &&
1589  (URL_INFILE(_URL_LGPL_1) ||
1590  URL_INFILE(_URL_LGPL_2))) {
1591  cp = LGPLVERS();
1592  INTERESTING(lDebug ? "LGPL(url)" : cp);
1593  lmem[_mLGPL] = 1;
1594  }
1595  else if (lmem[_fREAL] && !LVAL(_TEXT_GNU_LIC_INFO) &&
1596  GPL_INFILE(_LT_LGPL_OR)) {
1597  cp = LGPLVERS();
1598  INTERESTING(lDebug ? "LGPL(or)" : cp);
1599  lmem[_mLGPL] = 1;
1600  }
1601  else if (INFILE(_PHR_LGPL21_OR_LATER_2)) {
1602  INTERESTING(lDebug ? "LGPL-2.1-or-later(_LATER_2)" : "LGPL-2.1-or-later");
1603  lmem[_mLGPL] = 1;
1604  }
1605  else if (INFILE(_PHR_LGPL21_ONLY_ref) || INFILE(_TITLE_LGPLV21_2)) {
1606  INTERESTING("LGPL-2.1-only");
1607  lmem[_mLGPL] = 1;
1608  }
1609  }
1610  if (!lmem[_mGPL] && !HASTEXT(_TEXT_GCC, REG_EXTENDED)) {
1611  if (GPL_INFILE(_LT_GPL_ALT) && !INFILE(_LT_LGPL_ALT)) {
1612  cp = GPLVERS();
1613  INTERESTING(lDebug ? "GPL(alternate)" : cp);
1614  lmem[_mGPL] = 1;
1615  }
1616  else if ((GPL_INFILE(_LT_GPL3ref2) || GPL_INFILE(_PHR_GPL3_OR_LATER)
1617  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref1) || GPL_INFILE(_PHR_GPL3_OR_LATER_ref2))
1618  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
1619  {
1620  INTERESTING("GPL-3.0-or-later");
1621  lmem[_mGPL] = 1;
1622  }
1623  else if (GPL_INFILE(_LT_GPL3ref)) {
1624  INTERESTING(lDebug ? "GPL_v3(#2)" : "GPL-3.0-only");
1625  lmem[_mGPL] = 1;
1626  }
1627  else if (GPL_INFILE(_LT_GPL3ref3) && NOT_INFILE(_TITLE_LGPL3)) {
1628  INTERESTING("GPL-3.0-only");
1629  lmem[_mGPL] = 1;
1630  }
1631  else if (!lmem[_mLIBRE] && GPL_INFILE(_LT_GPLref1)
1632  && NOT_INFILE(_PHR_NOT_UNDER_GPL)
1633  && NOT_INFILE(_LT_LGPLref2)
1634  && NOT_INFILE(_PHR_GPL_COMPAT_3)) {
1635  /*
1636  * Special exceptions:
1637  * (1) LaTeX uses the following phrase:
1638  * "... why distributing LaTeX under the GNU General Public License (GPL)
1639  * was considered inappropriate".
1640  * (2) Python uses the following phrases:
1641  * "GPL-compatible doesn't mean that we're distributing Python under the GPL"
1642  * AND, "GPL-compatible licenses make it possible to combine Python with
1643  * other software that is released under the GPL.
1644  *****
1645  * These MUST be filtered. Do so by marking the GPL flag but don't assign
1646  * a license component (e.g., ignore GPL for this file)
1647  */
1648  if (INFILE(_PHR_LATEX_GPL_INAPPROPRIATE) ||
1649  INFILE(_PHR_PYTHON_NOTGPL_1) ||
1650  INFILE(_PHR_PYTHON_NOTGPL_2)) {
1651  lmem[_mGPL] = 1;
1652  }
1653  else if (!HASTEXT(_TEXT_GCC, REG_EXTENDED)
1654  && NOT_INFILE(_TITLE_D_FSL_10)){
1655  cp = GPLVERS();
1656  INTERESTING(cp);
1657  lmem[_mGPL] = 1;
1658  }
1659  }
1660  else if (INFILE(_LT_GPL_FSF)) {
1661  cp = GPLVERS();
1662  INTERESTING(lDebug ? "GPL(FSF)" : cp);
1663  lmem[_mGPL] = 1;
1664  }
1665  else if (GPL_INFILE(_LT_GPLref2)) {
1666  cp = GPLVERS();
1667  INTERESTING(lDebug ? "GPL(ref2)" : cp);
1668  lmem[_mGPL] = 1;
1669  }
1670  else if (GPL_INFILE(_LT_GPLref3)) {
1671  cp = GPLVERS();
1672  INTERESTING(lDebug ? "GPL(ref3)" : cp);
1673  lmem[_mGPL] = 1;
1674  }
1675  else if (INFILE(_LT_GPLref4)) {
1676  cp = GPLVERS();
1677  INTERESTING(lDebug ? "GPL(ref4)" : cp);
1678  lmem[_mGPL] = 1;
1679  }
1680  else if (GPL_INFILE(_LT_GPLref5)) {
1681  cp = GPLVERS();
1682  INTERESTING(lDebug ? "GPL(ref5)" : cp);
1683  lmem[_mGPL] = 1;
1684  }
1685  else if (GPL_INFILE(_LT_GPLref6)) {
1686  cp = GPLVERS();
1687  INTERESTING(lDebug ? "GPL(ref6)" : cp);
1688  lmem[_mGPL] = 1;
1689  }
1690  else if (GPL_INFILE(_LT_GPLref7)) {
1691  cp = GPLVERS();
1692  INTERESTING(lDebug ? "GPL(ref7)" : cp);
1693  lmem[_mGPL] = 1;
1694  }
1695  else if (GPL_INFILE(_LT_GPLref8)) {
1696  cp = GPLVERS();
1697  INTERESTING(lDebug ? "GPL(ref8)" : cp);
1698  lmem[_mGPL] = 1;
1699  }
1700  else if (INFILE(_LT_GPLref9)) {
1701  cp = GPLVERS();
1702  INTERESTING(lDebug ? "GPL(ref9)" : cp);
1703  lmem[_mGPL] = 1;
1704  }
1705  else if (GPL_INFILE(_LT_GPLref10)) {
1706  cp = GPLVERS();
1707  INTERESTING(lDebug ? "GPL(ref10)" : cp);
1708  lmem[_mGPL] = 1;
1709  }
1710  else if (INFILE(_LT_GPLref11)) {
1711  cp = GPLVERS();
1712  INTERESTING(lDebug ? "GPL(ref11)" : cp);
1713  lmem[_mGPL] = 1;
1714  }
1715  else if (INFILE(_LT_GPLref12)) {
1716  cp = GPLVERS();
1717  INTERESTING(lDebug ? "GPL(ref12)" : cp);
1718  lmem[_mGPL] = 1;
1719  }
1720  else if (GPL_INFILE(_LT_GPLref13)) {
1721  cp = GPLVERS();
1722  INTERESTING(lDebug ? "GPL(ref13)" : cp);
1723  lmem[_mGPL] = 1;
1724  }
1725  else if (GPL_INFILE(_LT_GPLref14) &&
1726  NOT_INFILE(_LT_LGPLref2)) {
1727  cp = GPLVERS();
1728  INTERESTING(lDebug ? "GPL(ref14)" : cp);
1729  lmem[_mGPL] = 1;
1730  }
1731  else if (INFILE(_LT_GPLref16)) {
1732  cp = GPLVERS();
1733  INTERESTING(lDebug ? "GPL(ref16)" : cp);
1734  lmem[_mGPL] = 1;
1735  }
1736  else if (INFILE(_LT_GPLref18)) {
1737  cp = GPLVERS();
1738  INTERESTING(lDebug ? "GPL(ref18)" : cp);
1739  lmem[_mGPL] = 1;
1740  }
1741  else if (INFILE(_LT_GPLref19)) {
1742  cp = GPLVERS();
1743  INTERESTING(lDebug ? "GPL(ref19)" : cp);
1744  lmem[_mGPL] = 1;
1745  }
1746  else if (INFILE(_LT_GPLref20)) {
1747  cp = GPLVERS();
1748  INTERESTING(lDebug ? "GPL(ref20)" : cp);
1749  lmem[_mGPL] = 1;
1750  }
1751  else if (!LVAL(_TEXT_GNU_LIC_INFO) && NOT_INFILE(_LT_INTEL_7) &&
1752  (URL_INFILE(_URL_GPL_1) ||
1753  URL_INFILE(_URL_GPL_2) ||
1754  URL_INFILE(_URL_GPL_3))) {
1755  cp = GPLVERS();
1756  INTERESTING(lDebug ? "GPL(url)" : cp);
1757  lmem[_mGPL] = 1;
1758  }
1759  else if (URL_INFILE(_URL_AGPL)) {
1760  cp = AGPLVERS();
1761  INTERESTING(lDebug ? "Affero(url)" : cp);
1762  lmem[_mGPL] = 1;
1763  }
1764  else if (!ltsr[_LT_LGPL_3] && INFILE(_LT_GPL_OR)) {
1765  cp = GPLVERS();
1766  INTERESTING(lDebug ? "GPL(or)" : cp);
1767  lmem[_mGPL] = 1;
1768  }
1769  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1770  (INFILE(_LT_GNU_1) + INFILE(_LT_GNU_2) +
1771  INFILE(_LT_GNU_3) + INFILE(_LT_GNU_4) > 2)) {
1772  cp = GPLVERS();
1773  INTERESTING(lDebug ? "GPL(GNU)" : cp);
1774  lmem[_mGPL] = 1;
1775  }
1776  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1777  INFILE(_LT_SEE_GPL) && INFILE(_LT_RECV_GPL)) {
1778  cp = GPLVERS();
1779  INTERESTING(lDebug ? "GPL(see)" : cp);
1780  lmem[_mGPL] = 1;
1781  }
1782  else if (!lmem[_mGPL] && !lmem[_mLGPL] &&
1783  INFILE(_LT_SEE_LGPL) && INFILE(_LT_RECV_LGPL)) {
1784  cp = LGPLVERS();
1785  INTERESTING(lDebug ? "LGPL(see)" : cp);
1786  lmem[_mLGPL] = 1;
1787  }
1788  }
1789  if (!lmem[_mGFDL] && (INFILE(_LT_GFDLref1) ||
1790  INFILE(_TITLE_GFDL))) {
1791  cp = GFDLVERS();
1792  INTERESTING(lDebug ? "GFDL(#2)" : cp);
1793  lmem[_mGFDL] = 1;
1794  }
1795  /*
1796  * Listed _explictly_ as an exception to the GPL -- this is NOT an 'else'
1797  * clause!
1798  */
1799  if (!lmem[_mGPL] && INFILE(_PHR_GPL_DESCRIPTIONS)) {
1800  INTERESTING(lDebug ? "GPL-kinda" : "GPL");
1801  lmem[_mGPL] = 1;
1802  }
1803  /* checking for FSF */
1804  if (INFILE(_LT_FSF_1)) {
1805  INTERESTING(lDebug ? "FSF(1)" : "FSFULLR");
1806  lmem[_mLGPL] = 1;
1807  }
1808  else if (INFILE(_LT_FSF_2)) {
1809  INTERESTING(lDebug ? "FSF(2)" : "FSF");
1810  }
1811  else if (INFILE(_LT_FSF_3)) {
1812  INTERESTING(lDebug ? "FSF(3)" : "FSF");
1813  }
1814  else if (mCR_FSF() && INFILE(_LT_FSF_4)) {
1815  INTERESTING(lDebug ? "FSF(4)" : "FSF");
1816  }
1817  else if (!lmem[_mGPL] && mCR_FSF() && INFILE(_LT_FSF_5)) {
1818  INTERESTING(lDebug ? "FSF(5)" : "FSF");
1819  }
1820  else if (!lmem[_mGPL] && INFILE(_LT_FSFUL)) {
1821  INTERESTING("FSFUL");
1822  }
1823  else if (!lmem[_mGPL] && NOT_INFILE(_LT_Autoconf_exception_20) && INFILE(_LT_FSFref1)) {
1824  INTERESTING(lDebug ? "FSF(ref1)" : "FSF");
1825  }
1826  else if (INFILE(_LT_FSFref2)) {
1827  INTERESTING(lDebug ? "FSF(ref2)" : "FSF");
1828  }
1829  else if (INFILE(_LT_LGPLrefFSF) &&
1830  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1831  INTERESTING(lDebug ? "LGPL(FSF)" : "LGPL");
1832  lmem[_mLGPL] = 1;
1833  }
1834  if (!lmem[_mGPL] && !lmem[_mLGPL] && !lmem[_mGFDL]) {
1835  /*
1836  * Check these patterns AFTER checking for FSF and GFDL, and only if the
1837  * CUPS license isn't present.
1838  */
1839  if (!lmem[_mCUPS] ) {
1840  if (GPL_INFILE(_LT_GPLpatt1) &&
1841  NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
1842  cp = GPLVERS();
1843  INTERESTING(lDebug ? "GPL(patt1)" : cp);
1844  lmem[_mGPL] = 1;
1845  }
1846  else if (GPL_INFILE(_LT_GPLpatt2)) {
1847  cp = GPLVERS();
1848  INTERESTING(lDebug ? "GPL(patt2)" : cp);
1849  lmem[_mGPL] = 1;
1850  }
1851  else if (INFILE(_CR_rms) && INFILE(_LT_GPL_2)) {
1852  INTERESTING("GPL(rms)");
1853  lmem[_mGPL] = 1;
1854  }
1855  else if (INFILE(_PHR_GPLISH_SAMPLE)) {
1856  INTERESTING(lDebug ? "GPLISH" : "GPL-possibility");
1857  INTERESTING(lDebug ? "GPLISH" : "LGPL-possibility");
1858  lmem[_mLGPL] = lmem[_mGPL] = 1;
1859  }
1860  }
1861  }
1862  else if (INFILE(_LT_GNU_COPYLEFT)) {
1863  INTERESTING("GNU-copyleft");
1864  lmem[_fGPL] = 1;
1865  }
1866  lmem[_fGPL] = lmem[_mLGPL]+lmem[_mGPL]+lmem[_mGFDL];
1867  }
1869  if (!lmem[_mGPL] && INFILE(_LT_GNU_PROJECTS)) {
1870  cp = GPLVERS();
1871  INTERESTING(lDebug ? "GPL(proj)" : cp);
1872  lmem[_mGPL] = 1;
1873  }
1875  if (HASTEXT(_LT_GPL_V2_NAMED_later, REG_EXTENDED) || HASTEXT(_TITLE_GPL2_ref1_later, REG_EXTENDED))
1876  {
1877  INTERESTING(lDebug ? "GPLV2+(named)" : "GPL-2.0-or-later");
1878  lmem[_mGPL] = 1;
1879  }
1880  else if (INFILE(_LT_TAPJOY) || INFILE(_LT_TAPJOY_ref1)) {
1881  INTERESTING("Tapjoy");
1882  lmem[_fGPL] = 1;
1883  lmem[_mMIT] = 1;
1884  }
1885  else if (!lmem[_mGPL] && !lmem[_mGFDL] && !lmem[_mLGPL] && !lmem[_fZPL]
1886  && (INFILE(_LT_GPL_NAMED)
1887  || INFILE(_LT_GPL_NAMED2)
1888  || HASTEXT(_LT_GPL_NAMED3, REG_EXTENDED))
1889  && !HASTEXT(_PHR_GPL_GHOSTSCRIPT, REG_EXTENDED)
1890  && NOT_INFILE(_LT_MPL_SECONDARY)
1891  && NOT_INFILE(_TEXT_NOT_GPL)
1892  && NOT_INFILE(_TEXT_NOT_GPL2)
1893  && NOT_INFILE(_LT_CNRI_PYTHON_GPL)
1894  && NOT_INFILE(_LT_W3Cref4)
1895  && NOT_INFILE(_LT_GPL_NAMED3_EXHIBIT)
1896  && NOT_INFILE(_LT_GPL_NAMED_COMPATIBLE)
1897  && !HASTEXT(_LT_GPL_NAMED_COMPATIBLE_1, REG_EXTENDED)
1898  && NOT_INFILE(_LT_GPL_NAMED_EXHIBIT)
1899  && NOT_INFILE(_TITLE_D_FSL_10)
1900  && NOT_INFILE(_LT_INTEL_7)
1901  && NOT_INFILE(_PHR_GPL_COMPAT_3)) {
1902  cp = GPLVERS();
1903  INTERESTING(lDebug ? "GPL(named)" : cp);
1904  lmem[_mGPL] = 1;
1905  }
1906  else if ( !lmem[_mGPL] && !INFILE(_TITLE_MIROS) && (INFILE(_LT_GPL_V2_NAMED) || INFILE(_LT_GPL_V2_NAMED_ref1)))
1907  {
1908  INTERESTING(lDebug ? "GPLV2(named)" : "GPL-2.0-only");
1909  lmem[_mGPL] = 1;
1910  }
1911  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_NAMED_later))
1912  {
1913  INTERESTING(lDebug ? "GPLV3(named_later)" : "GPL-3.0-or-later");
1914  }
1915  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_NAMED))
1916  {
1917  INTERESTING(lDebug ? "GPLV3(named)" : "GPL-3.0-only");
1918  }
1920  if (!lmem[_mLGPL] && (INFILE(_LT_LGPL_NAMED)
1921  || INFILE(_LT_LGPL_NAMED2)) && NOT_INFILE(_LT_GPL_NAMED_EXHIBIT)
1922  && NOT_INFILE(_LT_PHP_V30_2)) {
1923  cp = LGPLVERS();
1924  INTERESTING(lDebug ? "LGPL(named)" : cp);
1925  }
1926 
1928  /*
1929  * MIT, X11, Open Group, NEC -- text is very long, search in 2 parts
1930  */
1931  if (INFILE(_LT_JSON) && INFILE(_LT_MIT_NO_EVIL)) { // JSON license
1932  INTERESTING("JSON");
1933  lmem[_mMIT] = 1;
1934  }
1936  if (!lmem[_mWORDNET] && INFILE(_TITLE_WORDNET))
1937  {
1938  INTERESTING("WordNet-3.0");
1939  }
1941  if (INFILE(_CR_XFREE86_V10) || INFILE(_LT_XFREE86_V10)) {
1942  INTERESTING("XFree86-1.0");
1943  lmem[_mMIT] = 1;
1944  }
1945  else if (INFILE(_CR_XFREE86_V11) || INFILE(_LT_XFREE86_V11)) {
1946  INTERESTING("XFree86-1.1");
1947  lmem[_mMIT] = 1;
1948  }
1949  else if (INFILE(_LT_XFREE86)) {
1950  INTERESTING(lDebug ? "XFree86(1)" : "XFree86");
1951  lmem[_mMIT] = 1;
1952  }
1953  else if (HASTEXT(_LT_BSD_OR_MIT, REG_EXTENDED)) {
1954  INTERESTING("MIT");
1955  INTERESTING("BSD");
1956  lmem[_mMIT] = 1;
1957  }
1958  else if (HASTEXT(_LT_BSD_AND_MIT, REG_EXTENDED)) {
1959  INTERESTING("BSD");
1960  INTERESTING("MIT");
1961  lmem[_mMIT] = 1;
1962  }
1963  /*
1964  * MIT search order changed. First MIT license explicit phrases and references are checked .
1965  */
1966  else if (!lmem[_mMIT] && NOT_INFILE(_TITLE_MIT_EXHIBIT) && NOT_INFILE(_TITLE_SGI) &&
1967  (INFILE(_LT_MIT_1) || INFILE(_TITLE_MIT))) {
1968  if(INFILE(_LT_MIT_NO_EVIL)) {
1969  INTERESTING(lDebug ? "MIT-style(no evil)" : "JSON");
1970  lmem[_mMIT] = 1;
1971  }
1972  else if (INFILE(_LT_MIT_2)) {
1973  if (mCR_MIT() || INFILE(_TITLE_MIT)) {
1974  INTERESTING(lDebug ? "MIT(1)" : "MIT");
1975  lmem[_mMIT] = 1;
1976  }
1977  else if (INFILE(_TITLE_XNET)) {
1978  INTERESTING("Xnet");
1979  lmem[_mMIT] = 1;
1980  }
1981  else if (INFILE(_CR_X11) || INFILE(_TITLE_X11)) {
1982  INTERESTING(lDebug ? "X11(1)" : "X11");
1983  lmem[_mMIT] = 1;
1984  }
1985  else if (INFILE(_CR_XFREE86)) {
1986  INTERESTING(lDebug ? "XFree86(2)" : "XFree86");
1987  lmem[_mMIT] = 1;
1988  }
1989  /* MIT-advertising License */
1990  else if (INFILE(_LT_MIT_ADVERTISING)) {
1991  INTERESTING("MIT-advertising");
1992  lmem[_mMIT] = 1;
1993  }
1994  /* MIT-enna License */
1995  else if (INFILE(_LT_MIT_ENNA)) {
1996  INTERESTING("MIT-enna");
1997  lmem[_mMIT] = 1;
1998  }
1999  /* MIT-feh License */
2000  else if (INFILE(_LT_MIT_FEH)) {
2001  INTERESTING("MIT-feh");
2002  lmem[_mMIT] = 1;
2003  }
2004  /* MITNFA License */
2005  else if (HASTEXT(_LT_MITNFA, 0)) {
2006  INTERESTING("MITNFA");
2007  lmem[_mMIT] = 1;
2008  }
2009  /* Imlib2 License */
2010  else if (INFILE(_LT_Imlib2)) {
2011  INTERESTING("Imlib2");
2012  lmem[_mMIT] = 1;
2013  }
2014  else if (INFILE(_LT_MIT_13)) {
2015  INTERESTING(lDebug ? "MIT(14)" : "MIT");
2016  lmem[_mMIT] = 1;
2017  }
2018  /* NCSA */
2019  else if (INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_NCSA_EXHIBIT)) {
2020  INTERESTING(lDebug ? "NCSA(1)" : "NCSA");
2021  lmem[_mMIT] = 1;
2022  lmem[_fNCSA] = 1;
2023  }
2024  else if (INFILE(_LT_MIT_0)) {
2025  INTERESTING("MIT-0");
2026  lmem[_mMIT] = 1;
2027  }
2028  else if (NOT_INFILE(_LT_INTEL_7)) {
2029  INTERESTING(lDebug ? "MIT-style(1)" : "MIT-style");
2030  lmem[_mMIT] = 1;
2031  }
2032  }
2033  else if (INFILE(_LT_BITSTREAM_1)) {
2034  INTERESTING(lDebug ? "Bitstream(1)" : "Bitstream");
2035  lmem[_mMIT] = 1;
2036  }
2037  else if (mCR_X11()) {
2038  INTERESTING(lDebug ? "X11(2)" : "X11");
2039  }
2040  else if (!lmem[_mMPL] && INFILE(_LT_MPL_1)) {
2041  cp = MPLVERS(); /* NPL, too */
2042  INTERESTING(lDebug ? "MPL/NPL#5" : cp);
2043  lmem[_mMPL] = 1;
2044  }
2045  else if (!lmem[_mMIT] && (mCR_MIT() || INFILE(_TITLE_MIT)) && NOT_INFILE(_TITLE_MIT_EXHIBIT)) {
2046  INTERESTING(lDebug ? "MIT(2)" : "MIT");
2047  lmem[_mMIT] = 1;
2048  }
2049  /*
2050  * BOOST (relatively new, circa August 2003)
2051  * hmm, some references have a Copyright Notre Dame, some don't
2052  */
2053  else if (INFILE(_LT_BOOST_1)) {
2054  if (INFILE(_TITLE_BOOST10)) {
2055  INTERESTING("BSL-1.0");
2056  }
2057  else if (INFILE(_CR_NOTREDAME)) {
2058  INTERESTING(lDebug ? "Boost(ND)" : "BSL-1.0");
2059  }
2060  else if (INFILE(_TITLE_BOOST)) {
2061  INTERESTING("BSL-1.0");
2062  }
2063  else {
2064  INTERESTING("BSL-style");
2065  }
2066  }
2067  else if (mCR_MIT()) {
2068  INTERESTING(lDebug ? "MIT(3)" : "MIT");
2069  lmem[_mMIT] = 1;
2070  }
2071  else if (INFILE(_TITLE_ICU) || HASTEXT(_URL_ICU, REG_EXTENDED)) {
2072  INTERESTING(lDebug ? "MIT-style(ICU)" : "ICU");
2073  lmem[_mMIT] = 1;
2074  }
2075  else if (INFILE(_LT_ICU_2) && (INFILE(_CR_IBM_1) || INFILE(_CR_IBM_1))) {
2076  INTERESTING(lDebug ? "MIT-style(ICU)" : "ICU");
2077  lmem[_mMIT] = 1;
2078  }
2079  else if (INFILE(_TITLE_JasPer_20)) {
2080  INTERESTING(lDebug ? "JasPer(title)" : "JasPer-2.0");
2081  lmem[_mMIT] = 1;
2082  }
2083  else if (INFILE(_LT_UNICODE_4)) {
2084  INTERESTING(lDebug ? "MIT-style(Unicode)" : "Unicode");
2085  lmem[_fUNICODE] = 1;
2086  lmem[_mMIT] = 1;
2087  }
2088  /*
2089  * Adobe-Glyph
2090  */
2091  else if (HASTEXT(_LT_ADOBE_GLYPH_1, REG_EXTENDED) && INFILE(_LT_ADOBE_GLYPH_2)) {
2092  INTERESTING("Adobe-Glyph");
2093  }
2094  /*
2095  * Ubuntu Font
2096  */
2097  else if (INFILE(_LT_UBUNTU_FONT)) {
2098  INTERESTING("ubuntu-font-1.0");
2099  }
2100  /*
2101  * OFL license text has MIT license warranty claims which is identifed as MIT-style
2102  */
2103  else if (!lmem[_fOFL]) {
2104  INTERESTING(lDebug ? "MIT-style(2)" : "MIT-style");
2105  lmem[_mMIT] = 1;
2106  }
2107  }
2108  /*
2109  * Secondly X11 and MIT style phrases are checked.
2110  */
2111  else if (INFILE(_LT_MIT_0) && (INFILE(_LT_MIT_2) || INFILE(_LT_MIT_3) || INFILE(_LT_MIT_4) ||
2112  INFILE(_LT_MIT_5) || INFILE(_LT_MIT_6) || INFILE(_LT_MIT_7))) {
2113  if(INFILE(_LT_MIT_NO_EVIL)) {
2114  INTERESTING(lDebug ? "MIT-style(no evil)" : "JSON");
2115  lmem[_mMIT] = 1;
2116  }
2117  else if (INFILE(_LT_X11_5)) {
2118  if (INFILE(_CR_XFREE86)) {
2119  INTERESTING(lDebug ? "XFree86(3)" : "XFree86");
2120  }
2121  else {
2122  INTERESTING(lDebug ? "X11(3)" : "X11");
2123  }
2124  lmem[_mMIT] = 1;
2125  }
2126  else if (INFILE(_LT_Xnet_STYLE)) {
2127  INTERESTING("Xnet");
2128  lmem[_mMIT] = 1;
2129  }
2130  else if (INFILE(_LT_TAPJOY)) {
2131  INTERESTING("Tapjoy");
2132  lmem[_mMIT] = 1;
2133  }
2134  else {
2135  /*
2136  * SPDX defines curl license. It has very typical MIT-style text. The only way to
2137  * identify it is to use copyright or copyright reference.
2138  */
2139  if (INFILE(_CR_CURL)) {
2140  INTERESTING("curl");
2141  }
2142  else {
2143  INTERESTING(lDebug ? "MIT-style(7)" : "MIT-style");
2144  }
2145  lmem[_mMIT] = 1;
2146  }
2147  }
2148  else if (INFILE(_LT_MIT_5)) {
2149  if (mCR_MIT()) {
2150  INTERESTING(lDebug ? "MIT(4)" : "MIT");
2151  }
2152  else {
2153  INTERESTING(lDebug ? "MIT-style(3)" : "MIT-style");
2154  }
2155  lmem[_mMIT] = 1;
2156  }
2158  /*
2159  * Open Group, NEC, MIT use the same text in licenses
2160  */
2161  if (INFILE(_LT_MIT_6)) {
2162  if (!lmem[_mMIT] && INFILE(_CR_OpenGroup)) {
2163  INTERESTING(lDebug ? "OpenGroup(1)" : "OpenGroup");
2164  lmem[_mMIT] = 1;
2165  }
2166  else if (!lmem[_mCMU] && mCR_CMU()) {
2167  INTERESTING(lDebug ? "CMU(2)" : "CMU");
2168  lmem[_mCMU] = 1;
2169  }
2170  else if (!lmem[_mMIT] && mCR_MIT()) {
2171  INTERESTING(lDebug ? "MIT(6)" : "MIT");
2172  lmem[_mMIT] = 1;
2173  }
2174  else if (!lmem[_mMIT] && INFILE(_LT_HPND_1) && INFILE(_LT_HPND_2)) {
2175  INTERESTING("HPND-sell-variant");
2176  lmem[_mMIT] = 1;
2177  }
2178  /*
2179  * _LT_MIT_6 is very similar to _LT_BSD_2 where MIT-CMU licenses
2180  * are also detected. Following else if is the copy from there.
2181  */
2182  else if (!lmem[_mMIT] && INFILE(_LT_CMU_7)) {
2183  if (INFILE(_CR_CMU_1) || INFILE(_CR_CMU_2) || INFILE(_CR_BSDCAL)) {
2184  INTERESTING("MIT-CMU");
2185  }
2186  else {
2187  INTERESTING("MIT-CMU-style");
2188  }
2189  lmem[_mCMU] = 1;
2190  }
2191  else if (!lmem[_mMIT]) {
2192  INTERESTING(lDebug ? "MIT-style(4)" : "MIT-style");
2193  lmem[_mMIT] = 1;
2194  }
2195  }
2196  else if (INFILE(_SPDX_MIT_0)) {
2197  INTERESTING("MIT-0");
2198  }
2199  else if (INFILE(_SPDX_MIT_advertising)) {
2200  INTERESTING("MIT-advertising");
2201  }
2202  else if (INFILE(_SPDX_MIT_enna)) {
2203  INTERESTING("MIT-enna");
2204  }
2205  else if (INFILE(_SPDX_MIT_feh)) {
2206  INTERESTING("MIT-feh");
2207  }
2208  else if (!lmem[_mMIT] && INFILE(_LT_MIT_7)) {
2209  if (INFILE(_CR_OpenGroup)) {
2210  INTERESTING(lDebug ? "OpenGroup(2)" : "OpenGroup");
2211  }
2212  else if (!lmem[_mMIT] && mCR_MIT()) {
2213  INTERESTING(lDebug ? "MIT(7)" : "MIT");
2214  lmem[_mMIT] = 1;
2215  }
2216  else {
2217  INTERESTING(lDebug ? "MIT-style(5)" : "MIT-style");
2218  lmem[_mMIT] = 1;
2219  }
2220  }
2221  else if ((!lmem[_mMIT] || mCR_MIT()) && INFILE(_LT_MITref1)) {
2222  INTERESTING(lDebug ? "MIT(ref1)" : "MIT");
2223  lmem[_mMIT] = 1;
2224  }
2225  else if (!lmem[_mMIT] && INFILE(_LT_MITref2)) {
2226  INTERESTING(lDebug ? "MIT(ref2)" : "MIT");
2227  lmem[_mMIT] = 1;
2228  }
2229  else if (!lmem[_mMIT] && INFILE(_LT_MITref6)) {
2230  INTERESTING(lDebug ? "MIT(ref6)" : "MIT");
2231  lmem[_mMIT] = 1;
2232  }
2233  else if (!lmem[_mMIT] && INFILE(_LT_MITref3)) {
2234  INTERESTING(lDebug ? "MIT(ref3)" : "MIT-style");
2235  lmem[_mMIT] = 1;
2236  }
2237  else if (!lmem[_mMIT] && INFILE(_LT_MITref4)) {
2238  INTERESTING(lDebug ? "MIT(ref4)" : "MIT");
2239  lmem[_mMIT] = 1;
2240  }
2241  else if (!lmem[_mMIT] && (INFILE(_LT_MITref5) || INFILE(_LT_MITref9))) {
2242  INTERESTING(lDebug ? "MIT(ref5)" : "MIT");
2243  lmem[_mMIT] = 1;
2244  }
2245  else if (INFILE(_SPDX_MIT_CMU)) {
2246  INTERESTING("MIT-CMU");
2247  }
2248  else if (!lmem[_fREAL] && (INFILE(_SPDX_MIT))) {
2249  INTERESTING(lDebug ? "MIT(SPDX)" : "MIT");
2250  }
2251  else if (!lmem[_mMIT] && !lmem[_fREAL] && INFILE(_LT_MITref7)) {
2252  INTERESTING(lDebug ? "MIT(ref7)" : "MIT");
2253  lmem[_mMIT] = 1;
2254  }
2255  else if (!lmem[_mMIT] && INFILE(_LT_MITref8)) {
2256  INTERESTING(lDebug ? "MIT(ref8/9)" : "MIT");
2257  lmem[_mMIT] = 1;
2258  }
2259  else if (INFILE(_LT_OpenGroup_1)) {
2260  if (INFILE(_CR_OpenGroup)) {
2261  INTERESTING(lDebug ? "OpenGroup(3)" : "OpenGroup");
2262  }
2263  else {
2264  INTERESTING(lDebug ? "OG-style(3)" : "OpenGroup-style");
2265  }
2266  }
2267  else if (INFILE(_LT_OpenGroup_3)) {
2268  if (INFILE(_CR_OpenGroup)) {
2269  INTERESTING(lDebug ? "OpenGroup(5)" : "OpenGroup");
2270  }
2271  else {
2272  INTERESTING(lDebug ? "OG-style(5)" : "OpenGroup-style");
2273  }
2274  }
2275  else if (INFILE(_LT_OpenGroup_PROP)) {
2276  if (!lmem[_mXOPEN] && INFILE(_CR_XOPEN)) {
2277  INTERESTING("XOPEN-EULA");
2278  lmem[_mXOPEN] = 1;
2279  }
2280  else if (INFILE(_CR_OpenGroup)) {
2281  INTERESTING("OpenGroup-Proprietary");
2282  }
2283  else {
2284  INTERESTING("Proprietary");
2285  }
2286  }
2287  else if (INFILE(_LT_X11_1)) {
2288  if (mCR_X11()) {
2289  INTERESTING(lDebug ? "X11(4)" : "X11");
2290  }
2291  else {
2292  INTERESTING(lDebug ? "X11-style(2)" : "X11-style");
2293  }
2294  }
2295  else if (INFILE(_LT_X11_2)) {
2296  if (mCR_X11()) {
2297  INTERESTING(lDebug ? "X11(5)" : "X11");
2298  }
2299  else {
2300  INTERESTING(lDebug ? "X11-style(3)" : "X11-style");
2301  }
2302  }
2303  else if (INFILE(_LT_X11_3)) {
2304  if (mCR_X11()) {
2305  INTERESTING(lDebug ? "X11(6)" : "X11");
2306  }
2307  /*
2308  * Unix System Laboratories
2309  */
2310  else if (INFILE(_CR_USL_EUR)) {
2311  INTERESTING(lDebug ? "USLE(2)" : "USL-Europe");
2312  }
2313  else {
2314  INTERESTING(lDebug ? "X11-style(4)" : "X11-style");
2315  }
2316  }
2317  else if (INFILE(_LT_X11_4)) {
2318  if (mCR_X11()) {
2319  INTERESTING(lDebug ? "X11(7)" : "X11");
2320  }
2321  else {
2322  INTERESTING(lDebug ? "X11-style(5)" : "X11-style");
2323  }
2324  }
2325  else if (INFILE(_PHR_X11_1) || INFILE(_PHR_X11_2)) {
2326  INTERESTING(lDebug ? "PHR(X11)" : "X11");
2327  }
2328  else if (INFILE(_LT_X11_STYLE)) {
2329  INTERESTING(lDebug ? "X11-style(6)" : "X11-style");
2330  }
2331  /*
2332  * ISC License
2333  */
2334  if (INFILE(_PHR_ISC_1) || INFILE(_PHR_ISC_2) || HASTEXT(_URL_ISC, REG_EXTENDED)) {
2335  INTERESTING(lDebug ? "PHR(ISC)" : "ISC");
2336  lmem[_mISC] = 1;
2337  }
2338  else if (INFILE(_LT_MIT_4) && INFILE(_PHR_NO_WARRANTY_12)) {
2339  INTERESTING(lDebug ? "ISC(MIT-style(4))" : "ISC");
2340  lmem[_mISC] = 1;
2341  }
2342  else if (INFILE(_LT_MIT_8) && INFILE(_CR_ISC)) {
2343  INTERESTING(lDebug ? "ISC(MIT-style(8))" : "ISC");
2344  lmem[_mISC] = 1;
2345  }
2347  /*
2348  * NTP License, note that NTP license text is detected with _LT_BSD_2
2349  */
2350  if (INFILE(_TITLE_NTP)) {
2351  INTERESTING("NTP");
2352  lmem[_mNTP] = 1;
2353  }
2355  /* MirOS License (MirOS) */
2356  if (INFILE(_TITLE_MIROS)) {
2357  INTERESTING("MirOS");
2358  lmem[_mMIT] = 1;
2359  }
2361  /* Libpng license */
2362  if (INFILE(_TITLE_LIBPNG)) {
2363  INTERESTING("Libpng");
2364  }
2365  else if (INFILE(_LT_W3C_1)) {
2366  if (INFILE(_CR_W3C)) {
2367  INTERESTING(lDebug ? "W3C(1)" : "W3C");
2368  }
2369  else {
2370  INTERESTING(lDebug ? "W3C-style(1)" : "W3C-style");
2371  }
2372  lmem[_fW3C] = 1;
2373  }
2374  else if (!lmem[_mNTP] && !lmem[_mPYTHON] && !lmem[_fBSD] && INFILE(_LT_W3C_2)) {
2375  if (INFILE(_LT_W3C_19980720)) {
2376  INTERESTING("W3C-19980720");
2377  }
2378  else if (INFILE(_CR_W3C)) {
2379  INTERESTING(lDebug ? "W3C(2)" : "W3C");
2380  }
2381  else {
2382  INTERESTING(lDebug ? "W3C-style(2)" : "W3C-style");
2383  }
2384  lmem[_fW3C] = 1;
2385  }
2386  else if (INFILE(_LT_W3C_3)) {
2387  if (INFILE(_LT_W3C_8)) {
2388  if (INFILE(_LT_W3C_20021231)) {
2389  INTERESTING("W3C");
2390  }
2391  else if (INFILE(_LT_W3C_20150513)) {
2392  INTERESTING("W3C-20150513");
2393  }
2394  }
2395  else if (INFILE(_CR_W3C)) {
2396  INTERESTING(lDebug ? "W3C(3)" : "W3C");
2397  }
2398  else if (INFILE(_LT_W3Cref4)) {
2399  INTERESTING(lDebug ? "W3C(ref4)" : "W3C");
2400  }
2401  else {
2402  INTERESTING(lDebug ? "W3C-style(3)" : "W3C-style");
2403  }
2404  lmem[_fW3C] = 1;
2405  }
2406  else if (INFILE(_LT_W3C_4) && NOT_INFILE(_LT_PNG_ZLIB_2)) {
2407  if (INFILE(_CR_W3C)) {
2408  INTERESTING(lDebug ? "W3C(4)" : "W3C");
2409  }
2410  else {
2411  INTERESTING(lDebug ? "W3C-style(4)" : "W3C-style");
2412  }
2413  lmem[_fW3C] = 1;
2414  }
2415  else if (INFILE(_LT_W3C_5)) {
2416  if (INFILE(_CR_W3C)) {
2417  INTERESTING(lDebug ? "W3C(5)" : "W3C");
2418  }
2419  else {
2420  INTERESTING(lDebug ? "W3C-style(5)" : "W3C-style");
2421  }
2422  lmem[_fW3C] = 1;
2423  }
2424  else if (INFILE(_LT_W3C_6)) {
2425  if (INFILE(_CR_W3C)) {
2426  INTERESTING(lDebug ? "W3C(6)" : "W3C");
2427  }
2428  else {
2429  INTERESTING(lDebug ? "W3C-style(6)" : "W3C-style");
2430  }
2431  lmem[_fW3C] = 1;
2432  }
2433  else if (INFILE(_LT_W3C_7)) {
2434  if (INFILE(_CR_W3C)) {
2435  INTERESTING(lDebug ? "W3C(7)" : "W3C");
2436  }
2437  else if (INFILE(_LT_OGC)) {
2438  INTERESTING("OGC");
2439  }
2440  else {
2441  INTERESTING(lDebug ? "W3C-style(7)" : "W3C-style");
2442  }
2443  lmem[_fW3C] = 1;
2444  }
2445  else if (INFILE(_LT_W3Cref1)) {
2446  INTERESTING(lDebug ? "W3C(ref1)" : "W3C");
2447  lmem[_fW3C] = 1;
2448  }
2449  else if (INFILE(_LT_W3Cref2)) {
2450  INTERESTING(lDebug ? "W3C(ref2)" : "W3C");
2451  lmem[_fW3C] = 1;
2452  }
2453  else if (INFILE(_LT_W3Cref3)) {
2454  INTERESTING(lDebug ? "W3C(ref3)" : "W3C");
2455  lmem[_fW3C] = 1;
2456  }
2457  else if (INFILE(_LT_W3Cref4)) {
2458  INTERESTING(lDebug ? "W3C(ref4)" : "W3C");
2459  lmem[_fW3C] = 1;
2460  }
2461  else if (URL_INFILE(_URL_W3C_20021231)) {
2462  INTERESTING(lDebug ? "W3C-20021231(url)" : "W3C");
2463  lmem[_fW3C] = 1;
2464  }
2465  else if (URL_INFILE(_URL_W3C_IP)) {
2466  INTERESTING(lDebug ? "W3C-IP(url)" : "W3C-IP");
2467  lmem[_fW3C] = 1;
2468  }
2469  else if (URL_INFILE(_URL_W3C)) {
2470  INTERESTING(lDebug ? "W3C(url)" : "W3C");
2471  lmem[_fW3C] = 1;
2472  }
2473  else if (!lmem[_mMIT] && INFILE(_LT_MIT_3)) {
2474  if (INFILE(_LT_NTP_0)) {
2475  INTERESTING("NTP-0");
2476  }
2477  else if (mCR_MIT()) {
2478  INTERESTING(lDebug ? "MIT(8)" : "MIT");
2479  }
2480  else {
2481  INTERESTING(lDebug ? "MIT-style(6)" : "MIT-style");
2482  }
2483  lmem[_mMIT] = 1;
2484  }
2485  else if (!lmem[_mMIT] && INFILE(_LT_MIT_4)) {
2486  if (mCR_MIT()) {
2487  INTERESTING(lDebug ? "MIT(9)" : "MIT");
2488  }
2489  else if (!lmem[_mISC] && mCR_FSF()) {
2490  INTERESTING(lDebug ? "FSF(7)" : "FSF");
2491  }
2492  else if (!lmem[_mISC]) {
2493  INTERESTING(lDebug ? "MIT-style(13)" : "MIT-style");
2494  }
2495  lmem[_mMIT] = 1;
2496  }
2497  else if (!lmem[_mMIT] && INFILE(_LT_MIT_8)) {
2498  if (INFILE(_CR_VIXIE)) {
2499  INTERESTING("Vixie");
2500  }
2501  else if (INFILE(_LT_0BSD)) {
2502  INTERESTING("0BSD");
2503  }
2504  else if (mCR_MIT()) {
2505  INTERESTING(lDebug ? "MIT(10)" : "MIT");
2506  }
2507  else if (HASTEXT(_TEXT_TU_BERLIN, 0) && HASTEXT(_LT_FREE_87,0)) {
2508  INTERESTING("TU-Berlin-2.0");
2509  }
2510  else {
2511  INTERESTING(lDebug ? "MIT-style(8)" : "MIT-style");
2512  }
2513  lmem[_mMIT] = 1;
2514  }
2515  else if (INFILE(_LT_MIT_9)) {
2516  if (INFILE(_CR_SLEEPYCAT)) {
2517  MEDINTEREST(lDebug ? "Sleepycat(2)" : "Sleepycat");
2518  }
2519  else if (INFILE(_CR_BSDCAL)) {
2520  INTERESTING(lDebug ? "BSD(mit)" : "BSD");
2521  lmem[_fBSD] = 1;
2522  }
2523  else if (INFILE(_CR_SUN)) {
2524  INTERESTING(lDebug ? "SUN(mit)" : "SUN");
2525  lmem[_fBSD] = 1;
2526  }
2527  else if (!lmem[_mMIT] && mCR_MIT()) {
2528  INTERESTING(lDebug ? "MIT(11)" : "MIT");
2529  lmem[_mMIT] = 1;
2530  }
2531  else if (!lmem[_mMIT]) {
2532  /*
2533  * Tcl/Tk license has MIT phrase
2534  */
2535  if (INFILE(_LT_TCL)) {
2536  INTERESTING("TCL");
2537  lmem[_fTCL] = 1;
2538  }
2539  else {
2540  INTERESTING(lDebug ? "MIT-style(9)" : "MIT-style");
2541  lmem[_mMIT] = 1;
2542  }
2543  }
2544  }
2545  else if (INFILE(_LT_MIT_10)) {
2546  if (!lmem[_mMIT] && mCR_MIT()) {
2547  INTERESTING(lDebug ? "MIT(12)" : "MIT");
2548  lmem[_mMIT] = 1;
2549  }
2550  else {
2551  INTERESTING(lDebug ? "MIT-style(10)" : "MIT-style");
2552  lmem[_mMIT] = 1;
2553  }
2554  }
2555  else if ((INFILE(_LT_MIROS_PREAMBLE) || INFILE(_TITLE_MIROS)) && INFILE(_LT_MIT_11)) {
2556  INTERESTING(lDebug ? "MIT-style(MirOS)" : "MirOS");
2557  lmem[_mMIT] = 1;
2558  }
2559  else if (INFILE(_LT_MIT_11)) {
2560  INTERESTING(lDebug ? "MIT-style(11)" : "MIT-style");
2561  lmem[_mMIT] = 1;
2562  }
2563  else if (!lmem[_mMIT] && INFILE(_LT_MITDOC)) {
2564  if (mCR_MIT()) {
2565  INTERESTING(lDebug ? "MIT(13)" : "MIT");
2566  }
2567  else {
2568  INTERESTING(lDebug ? "MIT-style(12)" : "MIT-style");
2569  }
2570  lmem[_mMIT] = 1;
2571  }
2572  else if (!lmem[_mMIT] && INFILE(_LT_MIT_0) && NOT_INFILE(_LT_ECL)) {
2573  INTERESTING(lDebug ? "MIT(0)" : "MIT-style");
2574  lmem[_mMIT] = 1;
2575  }
2576  else if (INFILE(_LT_MIT_14)) {
2577  INTERESTING(lDebug ? "MIT-style(14)" : "MIT-style");
2578  lmem[_mMIT] = 1;
2579  }
2580  else if (INFILE(_LT_MIT_15)) {
2581  INTERESTING(lDebug ? "MIT-style(15)" : "ISC-style");
2582  lmem[_mMIT] = 1;
2583  }
2584  else if (INFILE(_LT_MPL_OR_MITX)) {
2585  if (!lmem[_mMPL]) {
2586  cp = MPLVERS();
2587  INTERESTING(lDebug ? "MPL(with-MIT)" : cp);
2588  lmem[_mMPL] = 1;
2589  }
2590  if (!lmem[_mMIT]) {
2591  INTERESTING(lDebug ? "MIT(with-MPL)" : "MIT");
2592  lmem[_mMIT] = 1;
2593  }
2594  }
2595  else if (!lmem[_mMIT] && (URL_INFILE(_URL_MIT) || URL_INFILE(_URL_MIT_ROCK))) {
2596  INTERESTING(lDebug ? "MIT(url)" : "MIT");
2597  lmem[_mMIT] = 1;
2598  }
2599  else if (HASTEXT(_TEXT_TU_BERLIN, 0) && HASTEXT(_LT_FREE_87,0)) {
2600  INTERESTING("TU-Berlin-1.0");
2601  }
2602  else if (INFILE(_LT_NIST_1) && INFILE(_LT_NIST_2)) {
2603  INTERESTING(lDebug ? "NIST" : "MIT-style");
2604  }
2605  else if (INFILE(_LT_FSFAP)) {
2606  INTERESTING("FSFAP");
2607  }
2609  /*
2610  * Freeware with attribution (no registered copyright, attribution-only)
2611  */
2612  if (INFILE(_LT_Freeware_Attribution) || INFILE(_LT_Freeware_Attribution_2)) {
2613  INTERESTING("Freeware-Attribution");
2614  }
2616  /*
2617  * Generic CopyLeft licenses
2618  */
2619  if (INFILE(_LT_COPYLEFT_1)) {
2620  INTERESTING("CopyLeft[1]");
2621  }
2622  else if (INFILE(_LT_COPYLEFT_2)) {
2623  INTERESTING("CopyLeft[2]");
2624  }
2626  /*
2627  * OpenContent license
2628  */
2629  if (INFILE(_LT_OPENCONTENT)) {
2630  if (INFILE(_TITLE_OPENCL10)) {
2631  INTERESTING("OCL-1.0");
2632  }
2633  else if (INFILE(_TITLE_OPENCL)) {
2634  INTERESTING("OCL");
2635  }
2636  else {
2637  INTERESTING("OCL-style");
2638  }
2639  }
2641  /*
2642  * jpeg/netpbm and png/zlib and others...
2643  */
2644  if (INFILE(_TITLE_ZLIB)) {
2645  INTERESTING("Zlib");
2646  }
2647  else if (INFILE (_LT_TRUECRYPT_30)) {
2648  INTERESTING("TrueCrypt-3.0");
2649  }
2650  else if (INFILE(_TITLE_LIBPNG)) {
2651  INTERESTING("Libpng");
2652  }
2653  /* IJG */
2654  else if (INFILE(_LT_JPEG_1)) {
2655  INTERESTING(lDebug ? "JPEG(1)" : "IJG");
2656  lmem[_fIJG] = 1;
2657  }
2658  else if (INFILE(_LT_JPEG_2) && HASTEXT(_TITLE_IJG_2, 0)) {
2659  INTERESTING(lDebug ? "JPEG(2)" : "IJG");
2660  lmem[_fIJG] = 1;
2661  }
2662  /* Zlib */
2663  else if (INFILE(_SPDX_zlib_acknowledgement)) {
2664  INTERESTING("zlib-acknowledgement");
2665  }
2666  else if (!lmem[_fREAL] && (INFILE(_SPDX_Zlib))) {
2667  INTERESTING("Zlib");
2668  }
2669  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)) {
2670  INTERESTING(lDebug ? "ZLIB(1)" : "Zlib");
2671  }
2672  else if (INFILE(_LT_PNG_ZLIBref4) && NOT_INFILE(_LT_PNG_ZLIBref4_EXHIBIT)) {
2673  INTERESTING(lDebug ? "ZLIB(6)" : "Zlib");
2674  }
2675  else if (!lmem[_fW3C] && INFILE(_LT_PNG_ZLIB_2)) {
2676  if (INFILE(_LT_libmng_2007_Clause_1)) {
2677  if (HASTEXT(_LT_libmng_2007_1, 0)) {
2678  INTERESTING("libmng-2007");
2679  }
2680  else if (INFILE(_LT_libpng_20_Clause_1)) {
2681  INTERESTING("libpng-2.0");
2682  }
2683  }
2684  else {
2685  INTERESTING(lDebug ? "PNG/ZLIB(2)" : "Libpng");
2686  }
2687  }
2688  else if (INFILE(_LT_PNG_ZLIBref1)) {
2689  INTERESTING(lDebug ? "ZLIB(3)" : "Zlib");
2690  }
2691  else if (INFILE(_LT_PNG_ZLIBref2)) {
2692  INTERESTING(lDebug ? "ZLIB(4)" : "Zlib");
2693  }
2694  else if (INFILE(_LT_PNG_ZLIBref3)) { /* might be zlib/libpng license, not sure */
2695  INTERESTING(lDebug ? "ZLIB(5)" : "Zlib-possibility");
2696  }
2697  else if (!LVAL(_TEXT_GNU_LIC_INFO) && (URL_INFILE(_URL_ZLIB_1) || URL_INFILE(_URL_ZLIB_2))) {
2698  INTERESTING(lDebug ? "ZLIB(url)" : "Zlib");
2699  }
2700 
2701  if (INFILE(_LT_INFO_ZIP) || URL_INFILE(_URL_INFO_ZIP)) {
2702  INTERESTING("Info-ZIP");
2703  }
2705  /*
2706  * IETF (primarily docs, RFCs, and protocol/standard proposals) . This
2707  * one is a little strange as text-formatters that print this license
2708  * will occasionally split the text across a page boundary. Here we
2709  * look for 2 separate footprints.
2710  */
2711  if (INFILE(_LT_IETF_1) || INFILE(_LT_IETF_2) || INFILE(_LT_IETF_3) ||
2712  INFILE(_LT_IETF_4)) {
2713  if (mCR_IETF()) {
2714  INTERESTING("IETF");
2715  }
2716  else if (INFILE(_LT_IETF_5)) {
2717  INTERESTING("IETF");
2718  }
2719  else if (HASTEXT(_LT_IETF_7, 0)) {
2720  INTERESTING("IETF");
2721  }
2722  else if (INFILE(_CR_OASIS)) {
2723  INTERESTING("OASIS");
2724  }
2725  else {
2726  INTERESTING("IETF-style");
2727  }
2728  }
2729  /*
2730  * IETF Trust's Legal Provisions
2731  */
2732  else if (INFILE(_LT_IETF_6)) {
2733  INTERESTING("IETF");
2734  }
2735  /*
2736  * Contributions to IETF Standard Process
2737  */
2738  else if (INFILE(_LT_IETF_7)) {
2739  INTERESTING("IETF-contribution");
2740  }
2742  /*
2743  * CDDL
2744  */
2745  if (INFILE(_PHR_CDDL_1) || HASTEXT(_PHR_CDDL_2, REG_EXTENDED)) {
2746  cp = CDDLVERS();
2747  INTERESTING(cp);
2748  lmem[_mCDDL] = 1;
2749  }
2751  /*
2752  * MPL (Mozilla)
2753  * ... Sun SISSL and one Mozilla licensing derivative share wording
2754  */
2755  if (!lmem[_fREAL] && NOT_INFILE(_LT_CPALref) && NOT_INFILE(_TITLE_GSOAP) &&
2756  (INFILE(_LT_MPL_OR) || INFILE(_TITLE_MPL_ref))) {
2757  cp = MPLVERS(); /* NPL, too */
2758  INTERESTING(lDebug ? "MPL/NPL#2" : cp);
2759  lmem[_mMPL] = 1;
2760  }
2761  if (INFILE(_LT_CPALref)) {
2762  if (INFILE(_TITLE_CPAL10)) {
2763  INTERESTING(lDebug ? "CPAL_v1.0(#2)" : "CPAL-1.0");
2764  lmem[_mMPL] = 1;
2765  lmem[_fATTRIB] = 1;
2766  }
2767  else if (INFILE(_TITLE_CPAL)) {
2768  INTERESTING(lDebug ? "CPAL(#2)" : "CPAL");
2769  lmem[_mMPL] = 1;
2770  lmem[_fATTRIB] = 1;
2771  }
2772  }
2773  else if (INFILE(_LT_CPAL_V1_ref)) {
2774  INTERESTING(lDebug ? "CPAL_v1.0(#3)" : "CPAL-1.0");
2775  lmem[_mMPL] = 1;
2776  lmem[_fATTRIB] = 1;
2777  }
2778  if (!lmem[_mMPL] && INFILE(_LT_MPL_2)) {
2779  if (INFILE(_TITLE_SISSL)) {
2780  cp = SISSLVERS();
2781  INTERESTING(lDebug ? "SISSL(MPL)" : cp);
2782  lmem[_mSUN] = 1;
2783  }
2784  else if (INFILE(_TITLE_SUN_PL10)) {
2785  INTERESTING("SPL-1.0");
2786  lmem[_mSUN] = 1;
2787  }
2788  else if (INFILE(_TITLE_SUN_PL)) {
2789  INTERESTING("SPL");
2790  lmem[_mSUN] = 1;
2791  }
2792  else if (INFILE(_TITLE_IDPL_V10)) {
2793  INTERESTING("IDPL-1.0");
2794  lmem[_mMPL] = 1;
2795  }
2796  else if (INFILE(_TITLE_IDPL)) {
2797  INTERESTING("IDPL");
2798  lmem[_mMPL] = 1;
2799  }
2800  else if (INFILE(_TITLE_INTERBASE)) {
2801  INTERESTING("Interbase-1.0");
2802  lmem[_mMPL] = 1;
2803  }
2804  else if (INFILE(_TITLE_NETIZEN_V10)) {
2805  INTERESTING("NOSL-1.0");
2806  lmem[_mMPL] = 1;
2807  }
2808  else if (INFILE(_TITLE_NETIZEN)) {
2809  INTERESTING(lDebug ? "NOSL(#1)" : "NOSL");
2810  lmem[_mMPL] = 1;
2811  }
2812  else if (INFILE(_TITLE_TPL10)) {
2813  INTERESTING(lDebug ? "TPL(v1.0#1)" : "MPL.TPL-1.0");
2814  lmem[_mMPL] = 1;
2815  }
2816  else if (INFILE(_TITLE_TPL)) {
2817  INTERESTING(lDebug ? "TPL(#1)" : "MPL.TPL");
2818  lmem[_mMPL] = 1;
2819  }
2820  else if (INFILE(_TITLE_GSOAP_V13)) {
2821  INTERESTING("gSOAP-1.3b");
2822  lmem[_mGSOAP] = 1;
2823  }
2824  else if (INFILE(_TITLE_GSOAP)) {
2825  INTERESTING("gSOAP");
2826  lmem[_mGSOAP] = 1;
2827  }
2828  else if (INFILE(_TITLE_FLASH2XML10)) {
2829  INTERESTING("Flash2xml-1.0");
2830  }
2831  else if (INFILE(_TITLE_NOKIA10A)) {
2832  INTERESTING("Nokia");
2833  lmem[_mMPL] = 1;
2834  }
2835  else if (INFILE(_LT_NOKIA)) {
2836  INTERESTING("Nokia");
2837  lmem[_mMPL] = 1;
2838  }
2839  else if (INFILE(_TITLE_OPENPL10)) {
2840  INTERESTING("OPL-1.0");
2841  }
2842  else if (INFILE(_TITLE_SNIA_V11)) {
2843  INTERESTING("SNIA-1.1");
2844  }
2845  else if (INFILE(_TITLE_SNIA_V10)) {
2846  INTERESTING("SNIA-1.0");
2847  }
2848  else if (INFILE(_TITLE_CPAL10)) {
2849  INTERESTING(lDebug ? "CPAL_v1.0(#1)" : "CPAL-1.0");
2850  lmem[_mMPL] = 1;
2851  lmem[_fATTRIB] = 1;
2852  }
2853  else if (INFILE(_TITLE_CPAL)) {
2854  INTERESTING(lDebug ? "CPAL(#1)" : "CPAL");
2855  lmem[_mMPL] = 1;
2856  lmem[_fATTRIB] = 1;
2857  }
2858  else if (HASTEXT(_TEXT_MOZNET, REG_EXTENDED)) {
2859  if (INFILE(_TITLE_SUGARCRM_PL)) {
2860  INTERESTING("SugarCRM-1.1.3");
2861  lmem[_mMPL] = 1;
2862  lmem[_fATTRIB] = 1;
2863  }
2864  else if (!lmem[_mMPL] && !lmem[_fREAL] && INFILE(_TITLE_MOZNET_PL)) {
2865  cp = MPLVERS(); /* NPL, too */
2866  INTERESTING(lDebug ? "MPL/NPL#1" : cp);
2867  lmem[_mMPL] = 1;
2868  }
2869  }
2870  else if (INFILE(_TITLE_RHeCos_V11)) {
2871  INTERESTING("RHeCos-1.1");
2872  }
2873  else if (INFILE(_TITLE_CYGNUS_ECOS_V10)) {
2874  INTERESTING("Cygnus-eCos-1.0");
2875  }
2876  else if (INFILE(_TITLE_H2_V10)) {
2877  INTERESTING("H2-1.0");
2878  }
2879  else {
2880  if (!lmem[_mCDDL]) {
2881  INTERESTING("MPL-style");
2882  lmem[_mMPL] = 1;
2883  }
2884  }
2885  }
2886  else if (!lmem[_mMPL] && (INFILE(_LT_NPLref) || INFILE(_LT_NPL_1))) {
2887  cp = MPLVERS(); /* NPL, too */
2888  INTERESTING(lDebug ? "MPL/NPL#3" : cp);
2889  lmem[_mMPL] = 1;
2890  }
2891  else if (!lmem[_mMPL] && INFILE(_LT_MPLref1)) {
2892  cp = MPLVERS(); /* NPL, too */
2893  INTERESTING(lDebug ? "MPL/NPL-ref#1" : cp);
2894  lmem[_mMPL] = 1;
2895  }
2896  else if (!lmem[_mMPL] && INFILE(_LT_IDPLref)) {
2897  if (INFILE(_TITLE_IDPL_V10)) {
2898  INTERESTING(lDebug ? "IDPL-v1(ref)" : "IDPL-1.0");
2899  }
2900  else {
2901  INTERESTING(lDebug ? "IDPL(ref)" : "IDPL");
2902  }
2903  lmem[_mMPL] = 1;
2904  }
2905  else if (!lmem[_mMPL] && !lmem[_mLIBRE] && !lmem[_fREAL] &&
2906  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_MPLref2)) {
2907  cp = MPLVERS(); /* NPL, too */
2908  INTERESTING(lDebug ? "MPL/NPL-ref#2" : cp);
2909  lmem[_mMPL] = 1;
2910  }
2911  else if (!lmem[_mMPL] && !lmem[_mLIBRE] && !lmem[_fREAL] &&
2912  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_TITLE_MOZNET_PL)) {
2913  cp = MPLVERS(); /* NPL, too */
2914  INTERESTING(lDebug ? "MPL/NPL#4" : cp);
2915  lmem[_mMPL] = 1;
2916  }
2917  else if (!lmem[_mMPL] && INFILE(_TITLE_NETSCAPE_EULA)) {
2918  INTERESTING("NPL-EULA");
2919  lmem[_mMPL] = 0;
2920  }
2921  else if (INFILE(_LT_NPL_2)) {
2922  INTERESTING(lDebug ? "NPL(#1)" : "NPL");
2923  lmem[_mMPL] = 0;
2924  }
2925  else if (INFILE(_TITLE_OPENPL)) {
2926  INTERESTING(lDebug ? "OPL(title)" : "OPL-style");
2927  }
2929  /*
2930  * Microsoft licenses: open and proprietary/EULA
2931  */
2932  if (INFILE(_LT_MSCORP_SSLref)) {
2933  INTERESTING(lDebug ? "MS-SSL(ref)" : "MS-SSL");
2934  lmem[_fMSCORP] = 1;
2935  }
2936  if (INFILE(_LT_MSCORP_PL)) {
2937  int ms_l = INFILE(_LT_MSCORP_LIMITED);
2938  int ms_r = INFILE(_LT_MSCORP_RL);
2939  if (ms_r && ms_l) {
2940  INTERESTING("MS-LRL");
2941  }
2942  else if (ms_r) {
2943  INTERESTING(lDebug ? "MS-RL(#1)" : "MS-RL");
2944  }
2945  else if (ms_l) {
2946  INTERESTING("MS-LPL");
2947  }
2948  else {
2949  INTERESTING(lDebug ? "MS-PL(#1)" : "MS-PL");
2950  }
2951  }
2952  else if (INFILE(_LT_MSCORP_LIMITEDref1)) {
2953  INTERESTING("MS-LPL");
2954  lmem[_fMSCORP] = 1;
2955  }
2956 
2957  if (INFILE(_TEXT_MICROSOFT)) {
2958  if (INFILE(_LT_MSCORP_INDEMNIFY)) {
2959  INTERESTING("MS-indemnity");
2960  lmem[_fMSCORP] = 1;
2961  }
2962  else if (INFILE(_LT_MSCORP_IP_1)) {
2963  INTERESTING(lDebug ? "MS-IP(1)" : "MS-IP");
2964  lmem[_fMSCORP] = 1;
2965  }
2966  else if (INFILE(_LT_MSCORP_IP_2)) {
2967  INTERESTING(lDebug ? "MS-IP(2)" : "MS-IP");
2968  lmem[_fMSCORP] = 1;
2969  }
2970  else if (INFILE(_LT_MSCORP_PLref1)) {
2971  INTERESTING(lDebug ? "MS-PL(ref1)" : "MS-PL");
2972  lmem[_fMSCORP] = 1;
2973  }
2974  else if (INFILE(_LT_MSCORP_PLref2)) {
2975  INTERESTING(lDebug ? "MS-PL(ref2)" : "MS-PL");
2976  lmem[_fMSCORP] = 1;
2977  }
2978  else if (INFILE(_LT_MSCORP_PLref3)) {
2979  INTERESTING(lDebug ? "MS-PL(ref3)" : "MS-PL");
2980  lmem[_fMSCORP] = 1;
2981  }
2982  else if (INFILE(_LT_MSCORP_RLref)) {
2983  INTERESTING(lDebug ? "MS-RL(ref)" : "MS-RL");
2984  lmem[_fMSCORP] = 1;
2985  }
2986  else if (INFILE(_LT_MSCORP_REFLIC)) {
2987  INTERESTING("MRL");
2988  lmem[_fMSCORP] = 1;
2989  }
2990  else if (INFILE(_LT_MSCORP_EULA_1) ||
2991  INFILE(_TITLE_MSCORP_EULA)) {
2992  INTERESTING(lDebug ? "MS-EULA(1)" : "MS-EULA");
2993  lmem[_fMSCORP] = 1;
2994  }
2995  else if (INFILE(_LT_MSCORP_EULA_2)) {
2996  INTERESTING(lDebug ? "MS-EULA(2)" : "MS-EULA");
2997  lmem[_fMSCORP] = 1;
2998  }
2999  else if (INFILE(_LT_MSCORP_EULA_3)) {
3000  INTERESTING(lDebug ? "MS-EULA(3)" : "MS-EULA");
3001  lmem[_fMSCORP] = 1;
3002  }
3003  else if (INFILE(_LT_MSCORP_EULA_4)) {
3004  INTERESTING(lDebug ? "MS-EULA(4)" : "MS-EULA");
3005  lmem[_fMSCORP] = 1;
3006  }
3007  else if (INFILE(_LT_MSCORP_EULA_5)) {
3008  INTERESTING(lDebug ? "MS-EULA(5)" : "MS-EULA");
3009  lmem[_fMSCORP] = 1;
3010  }
3011  else if (INFILE(_LT_MSCORP_EULA_6)) {
3012  INTERESTING(lDebug ? "MS-EULA(6)" : "MS-EULA");
3013  lmem[_fMSCORP] = 1;
3014  }
3015  else if (INFILE(_LT_MSCORP_1)) {
3016  INTERESTING(lDebug ? "MS(1)" : "Microsoft");
3017  lmem[_fMSCORP] = 1;
3018  }
3019  else if (INFILE(_LT_MSCORP_2)) {
3020  INTERESTING(lDebug ? "MS(2)" : "Microsoft");
3021  lmem[_fMSCORP] = 1;
3022  }
3023  else if (INFILE(_LT_MSCORP_3)) {
3024  INTERESTING(lDebug ? "MS(3)" : "Microsoft");
3025  lmem[_fMSCORP] = 1;
3026  }
3027  else if (INFILE(_LT_MSCORP_4)) {
3028  INTERESTING(lDebug ? "MS(4)" : "Microsoft");
3029  lmem[_fMSCORP] = 1;
3030  }
3031  else if (INFILE(_LT_MSCORP_5)) {
3032  INTERESTING(lDebug ? "MS(5)" : "Microsoft");
3033  lmem[_fMSCORP] = 1;
3034  }
3035  else if (INFILE(_LT_MSCORPref1)) {
3036  INTERESTING("Microsoft");
3037  lmem[_fMSCORP] = 1;
3038  }
3039  }
3041  /*
3042  * Santa Cruz Operation (SCO)
3043  */
3044  if (INFILE(_LT_SCO_COMM) && INFILE(_CR_SCO)) {
3045  INTERESTING("SCO.commercial");
3046  }
3048  /*
3049  * Zonealarm
3050  */
3051  if (INFILE(_LT_ZONEALARM) && INFILE(_TITLE_ZONEALARM_EULA)) {
3052  INTERESTING("ZoneAlarm-EULA");
3053  }
3055  /*
3056  * Ximian
3057  */
3058  if (HASTEXT(_TEXT_XIMIAN, 0)) {
3059  if (INFILE(_CR_XIMIAN)) {
3060  if (INFILE(_LT_XIMIAN)) {
3061  if (INFILE(_TITLE_XIMIANLOGO10)) {
3062  INTERESTING("Ximian-1.0");
3063  }
3064  else if (INFILE(_TITLE_XIMIANLOGO)) {
3065  INTERESTING("Ximian");
3066  }
3067  }
3068  }
3069  }
3071  /*
3072  * Xerox
3073  */
3074  if (HASTEXT(_TEXT_XEROX, 0)) {
3075  if (INFILE(_LT_XEROX_1) || INFILE(_LT_XEROX_2)) {
3076  if (INFILE(_CR_XEROX_1) || INFILE(_CR_XEROX_2)) {
3077  INTERESTING("Xerox");
3078  }
3079  else {
3080  INTERESTING("Xerox-style");
3081  }
3082  }
3083  }
3085  /*
3086  * Artifex Software
3087  */
3088  if (INFILE(_LT_ARTIFEX) && INFILE(_CR_ARTIFEX)) {
3089  INTERESTING("Artifex");
3090  }
3092  /*
3093  * AGE logic
3094  */
3095  if (INFILE(_LT_AGE) && INFILE(_CR_AGE)) {
3096  INTERESTING("AGE-Logic");
3097  }
3099  /*
3100  * OpenSSL
3101  */
3102  if (INFILE(_LT_OPENSSLref1) || INFILE(_LT_OPENSSLref2) ||
3103  INFILE(_LT_OPENSSLref3) || INFILE(_LT_OPENSSLref4) ||
3104  INFILE(_LT_OPENSSLref6) || INFILE(_LT_OPENSSLref7) ||
3105  INFILE(_LT_OPENSSLref8) ) {
3106  INTERESTING(lDebug ? "OpenSSL(ref)" : "OpenSSL");
3107  }
3108  else if (INFILE(_SPDX_OpenSSL) || INFILE(_URL_OPENSSL)) {
3109  INTERESTING(lDebug ? "OpenSSL(phr)" : "OpenSSL");
3110  }
3112  /*
3113  * Dual OpenSSL SSLeay
3114  */
3115  if (INFILE(_LT_COMBINED_OPENSSL_SSLEAY)) {
3116  INTERESTING("OpenSSL");
3117  INTERESTING("SSLeay");
3118  }
3120  /*
3121  * Ruby. Ruby is a dual license which allows distribution also under GPL.
3122  * GPL was earlier recognized beside Ruby here but GPL was not identified
3123  * in all Ruby cases. Therefore GPL statements have bee removed.
3124  */
3125  if (INFILE(_LT_RUBY)) {
3126  INTERESTING("Ruby");
3127  lmem[_fRUBY] = 1;
3128  }
3129  else if (INFILE(_LT_RUBYref1)) {
3130  INTERESTING(lDebug ? "Ruby(ref1)" : "Ruby");
3131  }
3132  else if (INFILE(_LT_RUBYref2)) {
3133  INTERESTING(lDebug ? "Ruby(ref2)" : "Ruby");
3134  }
3135  else if (INFILE(_LT_RUBYref3)) {
3136  INTERESTING(lDebug ? "Ruby(ref3)" : "Ruby");
3137  }
3138  else if (INFILE(_LT_RUBYref4)) {
3139  INTERESTING(lDebug ? "Ruby(ref4)" : "Ruby");
3140  }
3141  else if (INFILE(_LT_RUBYref5)) {
3142  INTERESTING(lDebug ? "Ruby(ref5)" : "Ruby");
3143  }
3144  else if (INFILE(_LT_RUBYref6)) {
3145  INTERESTING(lDebug ? "Ruby(ref6)" : "Ruby");
3146  }
3148  /*
3149  * Python and EGenix.com look a bit alike
3150  * Q: should all these Python rhecks be a family-check like OpenLDAP?
3151  */
3152  if (INFILE(_LT_EGENIX_COM)) {
3153  INTERESTING("eGenix");
3154  }
3155  else if (INFILE(_LT_PYTHON_4)) {
3156  INTERESTING("Python");
3157  lmem[_mPYTHON] = 1;
3158  }
3159  else if (!lmem[_mPYTHON] && lmem[_mPYTH_TEXT]) {
3160  if (INFILE(_LT_PYTHON_1) || INFILE(_LT_PYTHON_2)) {
3161  if (INFILE(_LT_CNRI_PYTHON_GPL)) {
3162  INTERESTING("CNRI-Python-GPL-Compatible");
3163  lmem[_mGPL] = 1;
3164  }
3165  else if (INFILE(_CR_PYTHON) || INFILE(_TITLE_PYTHON)) {
3166  cp = PYTHVERS();
3167  INTERESTING(lDebug ? "Python(1)" : cp);
3168  }
3169  else if (INFILE(_LT_CNRI_PYTHON_1)) {
3170  INTERESTING("CNRI-Python");
3171  }
3172  else if (INFILE(_LT_CNRI_JYTHON)) {
3173  INTERESTING("CNRI-Jython");
3174  }
3175  else {
3176  INTERESTING("Python-style");
3177  }
3178  lmem[_mPYTHON] = 1;
3179  }
3180  else if (INFILE(_SPDX_CNRI_Python_GPL_Compatible)) {
3181  INTERESTING("CNRI-Python-GPL-Compatible");
3182  }
3183  else if (INFILE(_SPDX_CNRI_Python)) {
3184  INTERESTING("CNRI-Python");
3185  }
3186  else if (INFILE(_LT_CNRI_PYTHON_2)) {
3187  INTERESTING("CNRI-Python");
3188  }
3189  else if (INFILE(_LT_PYTHON_3)) {
3190  cp = PYTHVERS();
3191  INTERESTING(lDebug ? "Python(4)" : cp);
3192  lmem[_mPYTHON] = 1;
3193  }
3194  else if (INFILE(_LT_PYTHONSTYLEref)) {
3195  cp = PYTHVERS();
3196  INTERESTING(lDebug ? "Python(ref1)" : "Python-style");
3197  lmem[_mPYTHON] = 1;
3198  }
3199  else if (!lmem[_mLIBRE] && (INFILE(_LT_PYTHONref1) ||
3200  INFILE(_LT_PYTHONref2))) {
3201  cp = PYTHVERS();
3202  INTERESTING(lDebug ? "Python(ref2)" : cp);
3203  lmem[_mPYTHON] = 1;
3204  }
3205  else if (!lmem[_mLIBRE] && !lmem[_fREAL] &&
3206  !LVAL(_TEXT_GNU_LIC_INFO) && INFILE(_LT_PYTHONref3)) {
3207  cp = PYTHVERS();
3208  INTERESTING(lDebug ? "Python(ref3)" : cp);
3209  lmem[_mPYTHON] = 1;
3210  }
3211  else if (!lmem[_mPYTHON] && URL_INFILE(_URL_PYTHON)) {
3212  cp = PYTHVERS();
3213  INTERESTING(lDebug ? "Python(url)" : cp);
3214  lmem[_mPYTHON] = 1;
3215  }
3216  else if (!lmem[_mPYTHON] && INFILE(_LT_PYTHON22ref)) {
3217  INTERESTING(lDebug ? "Python(22ref)" : "Python-2.2");
3218  lmem[_mPYTHON] = 1;
3219  }
3220  }
3222  /*
3223  * Intel
3224  */
3225  if (INFILE(_LT_INTEL) && NOT_INFILE(_LT_REAL_RPSL)) {
3226  INTERESTING(lDebug ? "Intel(8)" : "Intel");
3227  }
3228  else if (INFILE(_LT_INTEL_6)) {
3229  INTERESTING(lDebug ? "Intel(9)" : "Intel-other");
3230  }
3231  else if (INFILE(_LT_INTEL_7)) {
3232  INTERESTING(lDebug ? "Intel(10)" : "Intel-other");
3233  }
3234  else if (INFILE(_LT_INTEL_WLAN)) {
3235  INTERESTING("Intel-WLAN");
3236  }
3237  else if (INFILE(_LT_INTEL_ACPI)) {
3238  INTERESTING("Intel-ACPI");
3239  }
3240  else if (INFILE(_SPDX_Intel_ACPI)) {
3241  INTERESTING("Intel-ACPI");
3242  }
3243  else if (INFILE(_LT_ISSL_1) && INFILE(_LT_ISSL_2)) {
3244  INTERESTING("ISSL");
3245  }
3246  else if (!lmem[_fREAL] && INFILE(_SPDX_Intel)) {
3247  INTERESTING("Intel");
3248  }
3249  else if (HASTEXT(_TEXT_INTELCORP, 0)) {
3250  if (INFILE(_LT_INTEL_1)) {
3251  if (INFILE(_LT_INTEL_FW)) {
3252  INTERESTING(lDebug ? "Intel(2)" : "Intel-only-FW");
3253  }
3254  else {
3255  INTERESTING(lDebug ? "Intel(3)" : "Intel");
3256  }
3257  }
3258  else if (INFILE(_LT_INTEL_2)) {
3259  INTERESTING(lDebug ? "Intel(4)" : "Intel");
3260  }
3261  else if (INFILE(_LT_INTEL_3)) {
3262  INTERESTING(lDebug ? "Intel(5)" : "Intel");
3263  }
3264  else if (INFILE(_LT_INTEL_4)) {
3265  INTERESTING(lDebug ? "Intel(6)" : "Intel");
3266  }
3267  else if (INFILE(_LT_INTEL_RESTRICT)) {
3268  INTERESTING("Intel.RESTRICTED");
3269  }
3270  else if (INFILE(_LT_INTEL_BINARY) && HASTEXT(_TEXT_INTELCORPBINARY, 0) && HASTEXT(_TEXT_NOMODIFICATION, 0)) {
3271  INTERESTING("Intel-Binary");
3272  }
3273  }
3274  else if (INFILE(_LT_INTEL_5)) {
3275  INTERESTING(lDebug ? "CPL(Intel)" : "CPL");
3276  INTERESTING(lDebug ? "Intel(7)" : "Intel");
3277  }
3278  else if (INFILE(_LT_INTEL_EULA)) {
3279  INTERESTING("Intel-EULA");
3280  }
3282  /*
3283  * Bellcore
3284  */
3285  if (INFILE(_LT_BELLCORE)) {
3286  if (INFILE(_CR_BELLCORE)) {
3287  INTERESTING("Bellcore");
3288  }
3289  else {
3290  INTERESTING("Bellcore-style");
3291  }
3292  }
3294  /*
3295  * Purdue
3296  */
3297  if (INFILE(_LT_PURDUE) && INFILE(_CR_PURDUE) && HASTEXT(_TEXT_ALTERED_SOURCE, REG_EXTENDED) && HASTEXT(_TEXT_ORIGIN, 0)) {
3298  INTERESTING("Purdue");
3299  /* flag is set to avoid Cisco-style detection */
3300  lmem[_fPURDUE] = 1;
3301  }
3303  /*
3304  * Cisco systems
3305  */
3306  if (!lmem[_fPURDUE] && INFILE(_LT_CISCO)) {
3307  if (HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) &&
3308  HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED) &&
3309  HASTEXT(_LT_PNG_ZLIB_CLAUSE_3, 0)) {
3310  if (INFILE(_LT_Spencer_86_94_CLAUSE_1) && INFILE(_LT_Spencer_94_CLAUSE_2)) {
3311  INTERESTING("Spencer-94");
3312  }
3313  else {
3314  INTERESTING("Zlib-style");
3315  }
3316  }
3317  else if (INFILE(_CR_CISCO)) {
3318  INTERESTING("Cisco");
3319  }
3320  else {
3321  INTERESTING("Cisco-style");
3322  }
3323  }
3325  /*
3326  * HP
3327  */
3328  if (INFILE(_LT_HP_DEC)) {
3329  if (mCR_HP()) {
3330  INTERESTING(lDebug ? "HP(8)" : "HP");
3331  }
3332  else if (INFILE(_CR_ADOBE)) {
3333  INTERESTING(lDebug ? "Adobe(8)" : "Adobe");
3334  }
3335  else if (INFILE(_LT_GNUPLOT_1) && INFILE(_LT_GNUPLOT_2)) {
3336  INTERESTING("gnuplot");
3337  }
3338  else {
3339  INTERESTING(lDebug ? "HP-DEC-style(1)" : "HP-DEC-style");
3340  }
3341  }
3342  else if (HASTEXT(_TEXT_HP, REG_EXTENDED)) {
3343  if (INFILE(_LT_HP_1)) {
3344  INTERESTING(lDebug ? "HP(2)" : "HP");
3345  }
3346  else if (INFILE(_LT_HP_3) && INFILE(_LT_HP_snmp_pp)) {
3347  INTERESTING(lDebug ? "HP(3)" : "hp-snmp-pp");
3348  }
3349  else if (INFILE(_LT_HP_4)) {
3350  INTERESTING(lDebug ? "HP(4)" : "HP");
3351  }
3352  else if (INFILE(_LT_HP_5)) {
3353  INTERESTING(lDebug ? "HP(5)" : "HP");
3354  }
3355  else if (INFILE(_LT_HP_6)) {
3356  INTERESTING(lDebug ? "HP(6)" : "HP");
3357  }
3358  else if (INFILE(_LT_HP_7)) {
3359  INTERESTING(lDebug ? "HP(7)" : "HP");
3360  }
3361  else if (INFILE(_LT_COMPAQ_1)) {
3362  INTERESTING(lDebug ? "Compaq(1)" : "HP-Compaq");
3363  }
3364  else if (INFILE(_LT_HP_EULA1)) {
3365  INTERESTING(lDebug ? "HP-EULA(1)" : "HP-EULA");
3366  }
3367  else if (INFILE(_LT_HP_EULA2)) {
3368  INTERESTING(lDebug ? "HP-EULA(2)" : "HP-EULA");
3369  }
3370  else if (INFILE(_LT_HP_EULA3)) {
3371  INTERESTING(lDebug ? "HP-EULA(3)" : "HP-EULA");
3372  }
3373  else if (INFILE(_LT_HP_EULA4)) {
3374  INTERESTING(lDebug ? "HP-EULA(4)" : "HP-EULA");
3375  }
3376  else if (INFILE(_LT_COMPAQ_EULA)) {
3377  INTERESTING(lDebug ? "Compaq(EULA)" : "HP-Compaq");
3378  }
3379  else if (INFILE(_LT_HP_PROPRIETARY_1)) {
3380  INTERESTING(lDebug ? "HP-prop(1)" : "HP-Proprietary");
3381  }
3382  else if (INFILE(_LT_HP_PROPRIETARY_2)) {
3383  INTERESTING(lDebug ? "HP-prop(2)" : "HP-Proprietary");
3384  }
3385  else if (INFILE(_LT_HP_PROPRIETARY_3)) {
3386  INTERESTING(lDebug ? "HP-prop(3)" : "HP-Proprietary");
3387  }
3388  else if (INFILE(_LT_HP_IBM_1)) {
3389  INTERESTING(lDebug ? "HP+IBM(1)" : "HP+IBM");
3390  }
3391  else if (INFILE(_LT_HP_IBM_2)) {
3392  INTERESTING(lDebug ? "HP+IBM(2)" : "HP+IBM");
3393  }
3394  else if (!lmem[_mHP] && INFILE(_CR_DEC) && INFILE(_LT_DEC_1)) {
3395  INTERESTING(lDebug ? "HP-DEC(3)" : "HP-DEC");
3396  lmem[_mHP] = 1;
3397  }
3398  else if (!lmem[_mHP] && INFILE(_CR_DEC) && INFILE(_LT_DEC_2)) {
3399  INTERESTING(lDebug ? "HP-DEC(4)" : "HP-DEC");
3400  lmem[_mHP] = 1;
3401  }
3402  else if (INFILE(_LT_EDS_1) && INFILE(_CR_EDS)) {
3403  INTERESTING(lDebug ? "HP-EDS(1)" : "HP");
3404  }
3405  else if (INFILE(_LT_EDS_2) && INFILE(_CR_EDS)) {
3406  INTERESTING(lDebug ? "HP-EDS(2)" : "HP");
3407  }
3408  }
3409  else if (!lmem[_mHP] && INFILE(_LT_DEC_1)) {
3410  INTERESTING(lDebug ? "HP-DEC-style(2)" : "HP-DEC-style");
3411  }
3412  else if (!lmem[_mHP] && INFILE(_LT_DEC_2)) {
3413  INTERESTING(lDebug ? "HP-DEC-style(3)" : "HP-DEC-style");
3414  }
3415  else if (INFILE(_LT_HP_4)) {
3416  INTERESTING(lDebug ? "HP-style(1)" : "HP-style");
3417  }
3418  else if (INFILE(_LT_COMPAQ_1)) {
3419  INTERESTING(lDebug ? "HP-style(2)" : "HP-style");
3420  }
3421  else if (INFILE(_LT_EDS_1)) {
3422  INTERESTING(lDebug ? "HP-EDS(1#2)" : "HP");
3423  }
3424  else if (INFILE(_LT_EDS_2)) {
3425  INTERESTING(lDebug ? "HP-EDS(2#2)" : "HP");
3426  }
3428  /*
3429  * SUN Microsystems
3430  */
3431  if (!lmem[_mSUN] && (INFILE(_CR_SUN) || INFILE(_TEXT_MICROSYSTEMS))) {
3432  if (INFILE(_LT_SUN_PROPRIETARY) || INFILE(_LT_SUN_PROPRIETARY_2) || INFILE(_LT_SUN_PROPRIETARY_3)) {
3433  INTERESTING(lDebug ? "Sun(Prop)" : "Sun-Proprietary");
3434  lmem[_mSUN] = 1;
3435  }
3436  else if (INFILE(_LT_SUN_RPC)) {
3437  INTERESTING("Sun-RPC");
3438  lmem[_mSUN] = 1;
3439  }
3440  else if (INFILE(_LT_SUN_1)) {
3441  if (INFILE(_LT_SUN_FREE)) {
3442  INTERESTING(lDebug ? "Sun(Freeware)" : "Freeware");
3443  }
3444  else {
3445  INTERESTING(lDebug ? "Sun(3)" : "Sun");
3446  }
3447  lmem[_mSUN] = 1;
3448  }
3449  else if (INFILE(_LT_SUN_2)) {
3450  INTERESTING(lDebug ? "Sun(4)" : "Sun-Proprietary");
3451  lmem[_mSUN] = 1;
3452  }
3453  else if (INFILE(_LT_SUN_3)) {
3454  INTERESTING(lDebug ? "Sun(5)" : "Sun");
3455  lmem[_mSUN] = 1;
3456  }
3457  else if (INFILE(_LT_SUN_4)) {
3458  INTERESTING(lDebug ? "Sun(6)" : "Sun");
3459  lmem[_mSUN] = 1;
3460  }
3461  else if (INFILE(_LT_SUN_5)) {
3462  INTERESTING(lDebug ? "Sun(7)" : "Freeware");
3463  lmem[_mSUN] = 1;
3464  }
3465  else if (INFILE(_LT_SUN_6)) {
3466  INTERESTING(lDebug ? "Sun(8)" : "BSD-style");
3467  lmem[_mSUN] = 1;
3468  }
3469  else if (INFILE(_LT_SUN_NC)) {
3470  INTERESTING("Sun.Non-commercial");
3471  lmem[_mSUN] = 1;
3472  }
3473  else if (INFILE(_LT_SUNrestrict)) {
3474  INTERESTING("Sun.RESTRICTED");
3475  lmem[_mSUN] = 1;
3476  }
3477  else if (INFILE(_LT_SUN_BCLA_1) && INFILE(_TITLE_SUN_BCLA)) {
3478  INTERESTING(lDebug ? "BCLA(1)" : "Sun-BCLA");
3479  lmem[_mSUN] = 1;
3480  }
3481  else if (INFILE(_LT_SUN_BCLA_2)) {
3482  INTERESTING(lDebug ? "BCLA(2)" : "Sun-BCLA");
3483  lmem[_mSUN] = 1;
3484  }
3485  else if (INFILE(_LT_SUN_BCLAref)) {
3486  INTERESTING(lDebug ? "BCLA(ref)" : "Sun-BCLA");
3487  lmem[_mSUN] = 1;
3488  }
3489  else if (INFILE(_LT_SUN_ENTITLE)) {
3490  INTERESTING(lDebug ? "Sun(entitlement)" : "Sun");
3491  lmem[_mSUN] = 1;
3492  }
3493  else if (INFILE(_LT_SUN_ANYagreement)) {
3494  INTERESTING("Sun-EULA");
3495  lmem[_mSUN] = 1;
3496  }
3497  else if (INFILE(_LT_SUN_JAVA)) {
3498  INTERESTING("Sun-Java");
3499  lmem[_mSUN] = 1;
3500  }
3501  else if (INFILE(_LT_SUN_IP)) {
3502  INTERESTING("Sun-IP");
3503  lmem[_mSUN] = 1;
3504  lmem[_fIP] = 1;
3505  }
3506  else if (INFILE(_LT_SUN_SCA)) {
3507  INTERESTING("Sun-SCA");
3508  lmem[_mSUN] = 1;
3509  }
3510  else if (INFILE(_LT_SUN_SCSLref)) {
3511  if (INFILE(_TITLE_SCSL_V23)) {
3512  INTERESTING("SCSL-2.3");
3513  }
3514  else if (INFILE(_TITLE_SCSL_V30)) {
3515  INTERESTING("SCSL-3.0");
3516  }
3517  else {
3518  INTERESTING("SCSL");
3519  }
3520  lmem[_mSUN] = 1;
3521  }
3522  else if (INFILE(_TITLE_SUN_SCSL_TSA) &&
3523  INFILE(_LT_SUN_SCSL_TSA)) {
3524  if (INFILE(_TITLE_TSA_10)) {
3525  INTERESTING("SCSL-TSA-1.0");
3526  }
3527  else {
3528  INTERESTING("SCSL-TSA");
3529  }
3530  lmem[_mSUN] = 1;
3531  }
3532  else if (INFILE(_LT_SUN_SISSLref1)
3533  || INFILE(_LT_SUN_SISSLref2)) {
3534  cp = SISSLVERS();
3535  INTERESTING(lDebug ? "SISSL(ref#1)" : cp);
3536  lmem[_mSUN] = 1;
3537  }
3538  }
3539  else if (!lmem[_fREAL] && INFILE(_LT_SUN_PLref)) {
3540  INTERESTING(lDebug ? "Sun-PL(ref)" : "SPL");
3541  lmem[_mSUN] = 1;
3542  }
3543  else if (!lmem[_mSUN] && URL_INFILE(_URL_SUN_BINARY_V150)) {
3544  INTERESTING("Sun-BCLA-1.5.0");
3545  lmem[_mSUN] = 1;
3546  }
3547  else if (!lmem[_mSUN] && URL_INFILE(_URL_SUN_BINARY)) {
3548  INTERESTING(lDebug ? "BCLA(url)" : "Sun-BCLA");
3549  lmem[_mSUN] = 1;
3550  }
3551  else if (!lmem[_mSUN] && INFILE(_LT_SUN_GRAPHICS)) {
3552  INTERESTING(lDebug ? "Sun(8)" : "Sun");
3553  lmem[_mSUN] = 1;
3554  }
3555  else if (!lmem[_mSUN] && INFILE(_LT_SUN_GRAPHICS)) {
3556  INTERESTING(lDebug ? "Sun(9)" : "Sun");
3557  lmem[_mSUN] = 1;
3558  }
3559  else if ((!lmem[_mSUN] && INFILE(_LT_SUN_SISSLref1)) ||
3560  INFILE(_LT_SUN_SISSLref2)) {
3561  cp = SISSLVERS();
3562  INTERESTING(lDebug ? "SISSL(ref#2)" : cp);
3563  lmem[_mSUN] = 1;
3564  }
3565  else if (!lmem[_mSUN] && URL_INFILE(_URL_SISSL)) {
3566  cp = SISSLVERS();
3567  INTERESTING(lDebug ? "SISSL(url)" : cp);
3568  lmem[_mSUN] = 1;
3569  }
3571  if (INFILE(_LT_SUN_PRO)) {
3572  INTERESTING(lDebug ? "SunPro" : "Freeware");
3573  }
3575  /*
3576  * IBM
3577  */
3578  if (INFILE(_TEXT_IBM)) {
3579  if (INFILE(_LT_IBM_RECIP)) {
3580  INTERESTING("IBM-reciprocal");
3581  }
3582  else if (INFILE(_LT_IBM_4)) {
3583  INTERESTING(lDebug ? "IBM(4)" : "IBM-dhcp");
3584  }
3585  else if (INFILE(_LT_IBM_1)) {
3586  INTERESTING(lDebug ? "IBM(1)" : "MIT-style");
3587  }
3588  else if (INFILE(_LT_IBM_3)) {
3589  INTERESTING(lDebug ? "IBM(3)" : "MIT-style");
3590  }
3591  else if (INFILE(_LT_IBM_2)) {
3592  INTERESTING(lDebug ? "IBM(2)" : "IBM");
3593  }
3594  else if (INFILE(_LT_IBM_OWNER)) {
3595  INTERESTING(lDebug ? "IBM(4)" : "IBM");
3596  }
3597  else if (INFILE(_LT_IBM_JIKES)) {
3598  INTERESTING("IBM-JCL");
3599  }
3600  else if (INFILE(_LT_IBM_COURIER)) {
3601  INTERESTING("IBM-Courier");
3602  }
3603  else if (INFILE(_LT_IBM_EULA)) {
3604  INTERESTING(lDebug ? "IBM-EULA(1)" : "IBM-EULA");
3605  }
3606  else if (INFILE(_PHR_IBM_EULA)) {
3607  INTERESTING(lDebug ? "IBM-EULA(2)" : "IBM-EULA");
3608  }
3609  else if (INFILE(_LT_IBM_PIBS)) {
3610  INTERESTING("IBM-pibs");
3611  }
3612  else if (INFILE(_LT_IBM_AS_IS)) {
3613  INTERESTING("IBM-as-is");
3614  }
3615  }
3617  /*
3618  * Motorola
3619  */
3620  if (INFILE(_CR_MOT_1) || INFILE(_CR_MOT_2)) {
3621  if (INFILE(_LT_MOT_1)) {
3622  INTERESTING(lDebug ? "Motorola(1)" : "Motorola");
3623  }
3624  else if (INFILE(_LT_MOT_2)) {
3625  INTERESTING(lDebug ? "Motorola(2)" : "Motorola");
3626  }
3627  }
3628  if (HASTEXT(_TITLE_MOTOROLA_MOBILE, 0)) {
3629  INTERESTING("Motorola-Mobile-SLA");
3630  }
3632  /*
3633  * Java
3634  */
3635  if (INFILE(_LT_JAVA_WSDL4J)) {
3636  INTERESTING("Java-WSDL4J");
3637  }
3638  else if (INFILE(_LT_JAVA_WSDL_SCHEMA)) {
3639  INTERESTING("Java-WSDL-Schema");
3640  }
3641  else if (INFILE(_LT_JAVA_WSDL_POLICY)) {
3642  INTERESTING("Java-WSDL-Policy");
3643  }
3644  else if (INFILE(_LT_JAVA_WSDL_ENUM)) {
3645  INTERESTING("Java-WSDL-Spec");
3646  }
3647  else if (INFILE(_LT_MULTICORP_1)) {
3648  INTERESTING(lDebug ? "Java-Multi(1)" : "Java-Multi-Corp");
3649  }
3650  else if (INFILE(_LT_MULTICORP_2)) {
3651  INTERESTING(lDebug ? "Java-Multi(2)" : "Java-Multi-Corp");
3652  }
3654  /*
3655  * Mibble
3656  */
3657  if (INFILE(_LT_MIBBLE)) {
3658  if (INFILE(_TITLE_MIBBLE_28)) {
3659  INTERESTING("Mibble-2.8");
3660  }
3661  else {
3662  INTERESTING("Mibble");
3663  }
3664  }
3666  /*
3667  * Comtrol Corp
3668  */
3669  if (INFILE(_CR_COMTROL) && INFILE(_LT_COMTROL)) {
3670  INTERESTING("Comtrol");
3671  }
3673  /*
3674  * TrollTech
3675  */
3676  if (INFILE(_LT_TROLLTECH) && INFILE(_CR_TROLLTECH)) {
3677  INTERESTING("Trolltech");
3678  }
3679  else if (INFILE(_LT_QT_COMMref)) {
3680  INTERESTING("Qt.Commercial");
3681  }
3682  else if (INFILE(_LT_QT_PROPRIETARY) || INFILE(_TITLE_QT_PROPRIETARY)) {
3683  INTERESTING("Qt.Commercial");
3684  }
3686  /*
3687  * SNIA (Storage Network Industry) public license
3688  */
3689  if (!lmem[_mMPL] && !lmem[_mSUN] && INFILE(_LT_SNIA_PL)) {
3690  if (INFILE(_TITLE_SNIA_V11)) {
3691  INTERESTING("SNIA-1.1");
3692  }
3693  else if (INFILE(_TITLE_SNIA_V10)) {
3694  INTERESTING("SNIA-1.0");
3695  }
3696  else {
3697  INTERESTING("SNIA");
3698  }
3699  }
3700  else if (INFILE(_LT_SNIAref)) {
3701  if (INFILE(_TITLE_SNIA_V11)) {
3702  INTERESTING(lDebug ? "SNIA-1.1(ref)" : "SNIA-1.1");
3703  }
3704  else if (INFILE(_TITLE_SNIA_V10)) {
3705  INTERESTING(lDebug ? "SNIA-1.0(ref)" : "SNIA-1.0");
3706  }
3707  else {
3708  INTERESTING(lDebug ? "SNIA(ref)" : "SNIA");
3709  }
3710  }
3711  else if (URL_INFILE(_URL_SNIA_V11)) {
3712  INTERESTING(lDebug ? "SNIA-1.1(url)" : "SNIA-1.1");
3713  }
3714  else if (URL_INFILE(_URL_SNIA)) {
3715  INTERESTING(lDebug ? "SNIA(url)" : "SNIA");
3716  }
3718  /*
3719  * BEA
3720  */
3721  if (HASTEXT(_TEXT_BEASYS, 0)) {
3722  if (INFILE(_LT_BEA_1)) {
3723  INTERESTING(lDebug ? "BEA(1)" : "BEA");
3724  }
3725  else if (INFILE(_LT_BEA_2)) {
3726  INTERESTING(lDebug ? "BEA(2)" : "BEA");
3727  }
3728  }
3730  /*
3731  * ADOBE/FRAME
3732  */
3733  if (HASTEXT(_TEXT_ADOBE_FRAME, REG_EXTENDED)) {
3734  if (INFILE(_LT_ADOBE_1)) {
3735  INTERESTING(lDebug ? "Adobe(1)" : "Adobe");
3736  }
3737  else if (!lmem[_mMIT] && INFILE(_LT_ADOBE_2)) {
3738  INTERESTING(lDebug ? "Adobe(2)" : "Adobe");
3739  }
3740  else if (INFILE(_LT_ADOBE_3)) {
3741  INTERESTING(lDebug ? "Adobe(3)" : "Adobe");
3742  }
3743  else if (INFILE(_LT_ADOBE_4)) {
3744  INTERESTING(lDebug ? "Adobe(4)" : "Adobe-EULA");
3745  }
3746  else if (INFILE(_LT_ADOBE_5)) {
3747  INTERESTING(lDebug ? "Adobe(5)" : "Adobe-EULA");
3748  }
3749  else if (INFILE(_LT_ADOBE_6)) {
3750  INTERESTING(lDebug ? "Adobe(6)" : "Adobe-EULA");
3751  }
3752  else if (INFILE(_LT_ADOBE_7)) {
3753  INTERESTING(lDebug ? "Adobe(7)" : "Adobe-EULA");
3754  }
3755  else if (INFILE(_LT_FRAME)) {
3756  INTERESTING(lDebug ? "Adobe(Frame)" : "Adobe");
3757  }
3758  else if (INFILE(_LT_ADOBE_SRC) || INFILE(_TITLE_ADOBE_SRC)) {
3759  INTERESTING(lDebug ? "Adobe(src)" : "Adobe-2006");
3760  }
3761  else if (INFILE(_LT_ADOBE_DATA)) {
3762  INTERESTING(lDebug ? "Adobe(data)" : "Adobe");
3763  }
3764  else if (INFILE(_LT_ADOBE_EULA)) {
3765  INTERESTING("Adobe-EULA");
3766  }
3767  else if (INFILE(_LT_ADOBE_AFM)) {
3768  INTERESTING("APAFML");
3769  }
3770  else if (INFILE(_LT_ADOBE_DNG_SPEC) || INFILE(_TITLE_ADOBE_DNG_SPEC)) {
3771  INTERESTING("Adobe-DNG-Spec");
3772  }
3773  else if (HASTEXT(_TITLE_ADOBE_DNG, 0)) {
3774  INTERESTING("Adobe-DNG");
3775  }
3776  else if (INFILE(_LT_ADOBE_AFMPARSE_1) && INFILE(_LT_ADOBE_AFMPARSE_2)) {
3777  INTERESTING("Afmparse");
3778  }
3779  else if (INFILE(_LT_ADOBE_OTHER)) {
3780  INTERESTING(lDebug ? "Adobe(other)" : "Adobe");
3781  }
3782  else if (INFILE(_LT_ADOBE_SUB)) {
3783  INTERESTING(lDebug ? "Adobe(sub)" : "Adobe");
3784  }
3785  }
3787  /*
3788  * Docbook and Open Source Metadata Framework
3789  */
3790  if (INFILE(_LT_DOCBOOK)) {
3791  if (HASTEXT(_TEXT_DOCBOOK, 0)) {
3792  INTERESTING("DOCBOOK");
3793  }
3794  else if (HASTEXT(_TEXT_METADATA, 0)) {
3795  INTERESTING("OMF");
3796  }
3797  else {
3798  INTERESTING("DOCBOOK-style");
3799  }
3800  }
3802  /*
3803  * MP3 decoder
3804  */
3805  if (INFILE(_LT_MPEG3)) {
3806  INTERESTING("MPEG3-decoder");
3807  }
3809  /*
3810  * Gutmann License (ASN.1 Object Dumping Code)
3811  */
3812  if (INFILE(_LT_GUTMANN)) {
3813  INTERESTING("Gutmann");
3814  }
3816  /*
3817  * Google
3818  */
3819  if (INFILE(_LT_GOOGLE_1)) {
3820  INTERESTING(lDebug ? "Google(1)" : "Google");
3821  }
3822  else if (INFILE(_LT_GOOGLE_2)) {
3823  INTERESTING(lDebug ? "Google(2)" : "Google");
3824  }
3826  /*
3827  * Mandriva
3828  */
3829  if (INFILE(_LT_MANDRIVA)) {
3830  INTERESTING("Mandriva");
3831  }
3833  /*
3834  * Irondoc
3835  */
3836  if (INFILE(_LT_IRONDOC)) {
3837  INTERESTING("IronDoc");
3838  }
3840  /*
3841  * Quarterdeck Office Systems
3842  */
3843  if (INFILE(_LT_QUARTERDECK) && INFILE(_CR_QUARTERDECK)) {
3844  INTERESTING("QuarterDeck");
3845  }
3847  /*
3848  * Electronic Book Technologies
3849  */
3850  if (INFILE(_LT_EBT)) {
3851  if(INFILE(_CR_EBT)) {
3852  INTERESTING("EBT");
3853  } else {
3854  INTERESTING("EBT-style");
3855  }
3856  }
3858  /*
3859  * SGML
3860  */
3861  if (HASTEXT(_TEXT_SGMLUG, 0) && INFILE(_LT_SGML)) {
3862  INTERESTING("SGML");
3863  }
3865  /*
3866  * LaTeX (KOMA-Script)
3867  */
3868  if (HASTEXT(_TEXT_LATEX, REG_EXTENDED)) {
3869  if (INFILE(_LT_LATEXPL_1) || INFILE(_LT_LATEXPL_2) ||
3870  INFILE(_LT_LATEXPL_3)) {
3871  cp = LPPLVERS();
3872  INTERESTING(lDebug ? "LPPL(1)" : cp);
3873  }
3874  else if (INFILE(_LT_LATEX)) {
3875  cp = LPPLVERS();
3876  INTERESTING(lDebug ? "LPPL(2)" : cp);
3877  }
3878  else if (INFILE(_LT_LATEXPLref1) || INFILE(_LT_LATEXPLref2) ||
3879  INFILE(_LT_LATEXPLref3)) {
3880  cp = LPPLVERS();
3881  INTERESTING(lDebug ? "LPPL(3)" : cp);
3882  }
3883  else if (INFILE(_LT_LATEXref1)) {
3884  cp = LPPLVERS();
3885  INTERESTING(lDebug ? "LPPL(4)" : cp);
3886  }
3887  else if (INFILE(_LT_LATEXref2)) {
3888  cp = LPPLVERS();
3889  INTERESTING(lDebug ? "LPPL(5)" : cp);
3890  }
3891  else if (INFILE(_LT_LATEXref3)) {
3892  cp = LPPLVERS();
3893  INTERESTING(lDebug ? "LPPL(6)" : cp);
3894  }
3895  else if (INFILE(_LT_LATEXref4)) {
3896  cp = LPPLVERS();
3897  INTERESTING(lDebug ? "LPPL(7)" : cp);
3898  }
3899  else if (INFILE(_LT_LATEXref5)) {
3900  cp = LPPLVERS();
3901  INTERESTING(lDebug ? "LPPL(8)" : cp);
3902  }
3903  else if (URL_INFILE(_URL_LATEX)) {
3904  cp = LPPLVERS();
3905  INTERESTING(lDebug ? "LPPL(url)" : cp);
3906  }
3907  }
3909  /*
3910  * QPL
3911  */
3912  if (INFILE(_LT_QPL) || INFILE(_LT_QPLref)) {
3913  if (INFILE(_TITLE_QPL10_1) || INFILE(_TITLE_QPL10_2)) {
3914  INTERESTING("QPL-1.0");
3915  lmem[_mQPL] = 1;
3916  }
3917  else if (INFILE(_TITLE_QPL)) {
3918  INTERESTING("QPL");
3919  lmem[_mQPL] = 1;
3920  }
3921  }
3923  /*
3924  * FREE Public License (not really open/free) and GHOSTSCRIPT
3925  */
3926  if (HASTEXT(_TEXT_GHOSTSCRIPT, 0)) {
3927  if (INFILE(_LT_GS)) {
3928  if (INFILE(_TITLE_GS11)) {
3929  INTERESTING("Ghostscript-GPL-1.1");
3930  }
3931  else {
3932  INTERESTING(lDebug ? "GS-GPL(1)" : "Ghostscript-GPL");
3933  }
3934  }
3935  else if (INFILE(_CR_ALADDIN) || INFILE(_CR_ARTOFCODE)) {
3936  if (INFILE(_LT_GS_GNU1) || INFILE(_LT_GS_GNU2)) {
3937  INTERESTING("GNU-Ghostscript");
3938  }
3939  else if (INFILE(_LT_GNU_1) && INFILE(_LT_GNU_2)) {
3940  INTERESTING(lDebug ? "GS-GPL(2)" : "Ghostscript-GPL");
3941  }
3942  else if (INFILE(_LT_FREEPL) || INFILE(_LT_FREEPLref)) {
3943  INTERESTING(lDebug ? "Aladdin(Closed-Source!)" : "Aladdin");
3944  if (INFILE(_PHR_NOT_OPEN)) {
3945  INTERESTING(lDebug ? "Aladdin(Closed-Source!)" : "Aladdin");
3946  lmem[_mALADDIN] = 1;
3947  }
3948  else {
3949  INTERESTING(lDebug ? "Aladdin-Ghostscript" : "Aladdin");
3950  }
3951  }
3952  else if (INFILE(_LT_ALADDIN_RESTRICT)) {
3953  INTERESTING(lDebug ? "Aladdin(RESTRICTED)": "Aladdin");
3954  }
3955  }
3956  else if (INFILE(_LT_AFPL)) {
3957  INTERESTING("AFPL-Ghostscript");
3958  }
3959  }
3960  else if (INFILE(_LT_FREEPLref_1)) {
3961  INTERESTING("Aladdin");
3962  }
3963  else if (INFILE(_LT_FREEPL) || INFILE(_LT_FREEPLref)) {
3964  INTERESTING("Free-PL");
3965  }
3966  /*
3967  * IPTC (International Press Telecommunications Council)
3968  */
3969  else if (INFILE(_TITLE_IPTC) || INFILE(_LT_IPTC_2)) {
3970  INTERESTING("IPTC");
3971  }
3972  else if (INFILE(_LT_IPTC_1) && mCR_IPTC()) {
3973  INTERESTING("IPTC");
3974  }
3975  /*
3976  * Macromedia
3977  */
3978  else if (INFILE(_TITLE_MACROMEDIA_EULA)) {
3979  INTERESTING("MacroMedia-RPSL");
3980  }
3981  /*
3982  * Ontopia
3983  */
3984  else if (INFILE(_LT_ONTOPIA) && INFILE(_TITLE_ONTOPIA)) {
3985  INTERESTING("Ontopia");
3986  }
3988  /*
3989  * Ascender
3990  */
3991  if (INFILE(_LT_ASCENDER_WEBFONT) || INFILE(_LT_ASCENDER_WEBFONT_2) ||
3992  INFILE(_TITLE_ASCENDER_WEBFONT)) {
3993  INTERESTING("Ascender-WebFont-EULA");
3994  }
3995  else if (INFILE(_LT_ASCENDER_EULA) && INFILE(_TITLE_ASCENDER_EULA)) {
3996  INTERESTING("Ascender-EULA");
3997  }
3999  /*
4000  * ADAPTEC
4001  */
4002  if (INFILE(_LT_ADAPTEC_OBJ)) {
4003  INTERESTING("Adaptec.RESTRICTED");
4004  }
4005  else if (INFILE(_CR_ADAPTEC) && INFILE(_LT_ADAPTEC_GPL)) {
4006  INTERESTING("Adaptec-GPL");
4007  }
4009  /*
4010  * Artistic and Perl
4011  */
4012  if (INFILE(_LT_PERL_1)) {
4013  INTERESTING(lDebug ? "Artistic(Perl#1)" : "Artistic-1.0-Perl");
4014  if (!lmem[_mGPL]) {
4015  INTERESTING("Dual-license");
4016  INTERESTING(lDebug ? "GPL(Perl#1)" : "GPL-1.0-or-later");
4017  }
4018  }
4019  else if (INFILE(_LT_PERL_2)) {
4020  INTERESTING(lDebug ? "Artistic(Perl#2)" : "Artistic-1.0-Perl");
4021  if (!lmem[_mGPL]) {
4022  INTERESTING("Dual-license");
4023  INTERESTING(lDebug ? "GPL(Perl#2)" : "GPL-1.0-or-later");
4024  }
4025  }
4026  else if (INFILE(_LT_PERL_3)) {
4027  if (INFILE(_LT_Spencer_86_94_CLAUSE_1) &&
4028  HASTEXT(_LT_PNG_ZLIB_CLAUSE_1, 0) &&
4029  HASTEXT(_LT_PNG_ZLIB_CLAUSE_2, REG_EXTENDED)) {
4030  INTERESTING("Spencer-86");
4031  }
4032  else if (!lmem[_fOPENLDAP] && !TRYGROUP(famOPENLDAP)) {
4033  INTERESTING(lDebug ? "Artistic(Perl#3)" : "Artistic-1.0");
4034  }
4035  }
4036  /*
4037  * Licensed "same as perl itself" will actually be Artistic AND GPL, per
4038  * Larry Wall and the documented licensing terms of "perl"
4039  */
4040  else if (INFILE(_LT_PERLref1)) {
4041  INTERESTING(lDebug ? "Artistic(Perl-ref1)" : "Artistic-1.0-Perl");
4042  if (!lmem[_mGPL]) {
4043  INTERESTING("Dual-license");
4044  INTERESTING(lDebug ? "GPL(Perl-ref1)" : "GPL-1.0-or-later");
4045  }
4046  }
4047  else if (PERL_INFILE(_LT_PERLref2)) {
4048  INTERESTING(lDebug ? "Artistic(Perl-ref2)" : "Artistic-1.0-Perl");
4049  if (!lmem[_mGPL]) {
4050  INTERESTING("Dual-license");
4051  INTERESTING(lDebug ? "GPL(Perl-ref2)" : "GPL-1.0-or-later");
4052  }
4053  }
4054  else if (INFILE(_LT_PERLref3)) {
4055  INTERESTING(lDebug ? "Artistic(Perl-ref3)" : "Artistic-1.0-Perl");
4056  if (!lmem[_mGPL]) {
4057  INTERESTING("Dual-license");
4058  INTERESTING(lDebug ? "GPL(Perl-ref3)" : "GPL-1.0-or-later");
4059  }
4060  }
4061  else if (INFILE(_LT_PERLref4)) {
4062  INTERESTING(lDebug ? "Artistic(Perl-ref4)" : "Artistic-1.0-Perl");
4063  if (!lmem[_mGPL]) {
4064  INTERESTING("Dual-license");
4065  INTERESTING(lDebug ? "GPL(Perl-ref4)" : "GPL-1.0-or-later");
4066  }
4067  }
4068  else if (INFILE(_LT_PERLref5)) {
4069  INTERESTING(lDebug ? "Artistic(Perl-ref5)" : "Artistic-1.0-Perl");
4070  if (!lmem[_mGPL]) {
4071  INTERESTING("Dual-license");
4072  INTERESTING(lDebug ? "GPL(Perl-ref5)" : "GPL-1.0-or-later");
4073  }
4074  }
4075  else if (INFILE(_TITLE_CLARTISTIC)) {
4076  INTERESTING("ClArtistic");
4077  lmem[_fCLA] = 1;
4078  }
4079  else if (!lmem[_fREAL] && !LVAL(_TEXT_GNU_LIC_INFO) &&
4080  (INFILE(_LT_ART_1) || INFILE(_LT_ARTref1) ||
4081  INFILE(_LT_ARTref2) || INFILE(_LT_ARTref3) ||
4082  INFILE(_LT_ARTref4) || PERL_INFILE(_LT_ARTref5) ||
4083  PERL_INFILE(_LT_ARTref6))) {
4084  if (INFILE(_TITLE_OGTSL)) {
4085  INTERESTING("OGTSL");
4086  }
4087  else if (!lmem[_mLIBRE] && !lmem[_fOPENLDAP] &&
4088  !TRYGROUP(famOPENLDAP)) {
4089  if (INFILE(_LT_ART_V2) || INFILE(_TITLE_ART20)) {
4090  INTERESTING(lDebug ? "Artistic(v2.0#1)" : "Artistic-2.0");
4091  }
4092  else if (INFILE(_PHR_Artistic_20)) {
4093  INTERESTING("Artistic-2.0");
4094  }
4095  else if (INFILE(_TITLE_NBPL_V10)) {
4096  INTERESTING("NBPL-1.0");
4097  lmem[_fARTISTIC] = 1;
4098  }
4099  else if(HASTEXT(_PHR_ARTISTIC_PERL, 0)) {
4100  INTERESTING("Artistic-1.0-Perl");
4101  lmem[_fARTISTIC] = 1;
4102  }
4103  else if (HASTEXT(_PHR_ARTISTIC_CLAUSE8, 0))
4104  {
4105  INTERESTING("Artistic-1.0-cl8");
4106  lmem[_fARTISTIC] = 1;
4107  }
4108  else {
4109  INTERESTING(lDebug ? "Artistic(v1.0#other)" : "Artistic-1.0");
4110  lmem[_fARTISTIC] = 1;
4111  }
4112  }
4113  }
4114  else if (INFILE(_LT_ART_2) && INFILE(_TITLE_ART20)) {
4115  INTERESTING(lDebug ? "Artistic(v2.0#2)" : "Artistic-2.0");
4116  }
4117  else if (INFILE(_FILE_ART1) || INFILE(_FILE_ART2)) {
4118  INTERESTING(lDebug ? "Artistic(deb)" : "Artistic-1.0");
4119  }
4120  else if (URL_INFILE(_URL_ART)) {
4121  INTERESTING(lDebug ? "Artistic(url)" : "Artistic-1.0");
4122  }
4124  /*
4125  * LDP, Manpages, OASIS, GPDL, Linux-HOWTO and Linux-doc
4126  */
4127  if (INFILE(_TITLE_LDPL20)) {
4128  INTERESTING("LDPL-2.0");
4129  }
4130  else if (INFILE(_TITLE_LDPL1A)) {
4131  INTERESTING("LDPL-1A");
4132  }
4133  else if (INFILE(_LT_LDPL)) {
4134  INTERESTING(lDebug ? "LDPL(1)" : "LDPL");
4135  }
4136  else if (INFILE(_LT_LDPLref1)) {
4137  INTERESTING(lDebug ? "LDPL(ref1)" : "LDPL");
4138  }
4139  else if (INFILE(_LT_LDPLref2)) {
4140  INTERESTING(lDebug ? "LDPL(ref2)" : "LDPL");
4141  }
4142  else if (INFILE(_LT_LDPLref3)) {
4143  INTERESTING(lDebug ? "LDPL(ref3)" : "LDPL");
4144  }
4145  /*
4146  * GNU-Manpages, Software in the Public Interest (Debian), aka SPI
4147  */
4148  else if (INFILE(_LT_SPI)) {
4149  if (INFILE(_LT_MANPAGE)) {
4150  INTERESTING("GNU-Manpages");
4151  }
4152  else if (!lmem[_fGPL]) {
4153  if (INFILE(_CR_SPI)) {
4154  INTERESTING("Debian-SPI");
4155  }
4156  else {
4157  INTERESTING("Debian-SPI-style");
4158  }
4159  }
4160  }
4161  else if (INFILE(_LT_GPDLref)) {
4162  INTERESTING(lDebug ? "GPDL(1)" : "GPDL");
4163  }
4164  else if (INFILE(_TITLE_GPDL)) {
4165  INTERESTING(lDebug ? "GPDL(2)" : "GPDL");
4166  }
4167  else if (INFILE(_LT_FREEBSD_DOC) && INFILE(_TITLE_FREEBSD_DOC)) {
4168  INTERESTING("FreeBSD-Doc");
4169  }
4170  else if (INFILE(_LT_LINUX_HOWTO)) {
4171  INTERESTING("Linux-HOWTO");
4172  }
4173  else if (INFILE(_LT_LINUXDOC)) {
4174  INTERESTING("LinuxDoc");
4175  }
4176  else if (INFILE(_LT_IEEE_DOC)) {
4177  INTERESTING("IEEE-Doc");
4178  }
4180  /*
4181  * U-Washington
4182  */
4183  if (INFILE(_LT_UW1)) {
4184  if (INFILE(_CR_UWASHINGTON)) {
4185  INTERESTING("U-Wash.Free-Fork");
4186  }
4187  else {
4188  INTERESTING(lDebug ? "U-Wash-style(1)" : "U-Wash-style");
4189  }
4190  }
4191  else if (INFILE(_LT_UW2)) {
4192  if (INFILE(_CR_UWASHINGTON)) {
4193  INTERESTING(lDebug ? "U-Wash(2)" : "U-Washington");
4194  }
4195  else {
4196  INTERESTING(lDebug ? "U-Wash-style(2)" : "U-Wash-style");
4197  }
4198  }
4199  else if (INFILE(_LT_UW3)) {
4200  if (INFILE(_CR_UWASHINGTON)) {
4201  INTERESTING(lDebug ? "U-Wash(3)" : "U-Washington");
4202  }
4203  else {
4204  INTERESTING(lDebug ? "U-Wash-style(3)" : "U-Wash-style");
4205  }
4206  }
4207  else if (INFILE(_LT_UW4)) {
4208  if (INFILE(_CR_UWASHINGTON)) {
4209  INTERESTING(lDebug ? "U-Wash(4)" : "U-Washington");
4210  }
4211  else {
4212  INTERESTING(lDebug ? "U-Wash-style(4)" : "U-Wash-style");
4213  }
4214  }
4216  /*
4217  * WU-ftpd (not the school north of Oregon!
4218  */
4219  if (INFILE(_LT_WU_FTPD)) {
4220  if (INFILE(_TITLE_WU_FTPD) || INFILE(_CR_WASHU)) {
4221  INTERESTING(lDebug ? "Wash-U(1)" : "Wash-U-StLouis");
4222  }
4223  else {
4224  INTERESTING("Wash-U-style");
4225  }
4226  }
4227  else if (INFILE(_LT_WU_FTPDref)) {
4228  INTERESTING(lDebug ? "Wash-U(ref)" : "Wash-U-StLouis");
4229  }
4230  /*
4231  * Delaware
4232  */
4233  else if (INFILE(_LT_DELAWARE)) {
4234  if (INFILE(_CR_DELAWARE)) {
4235  INTERESTING("U-Del");
4236  }
4237  else {
4238  INTERESTING("U-Del-style");
4239  }
4240  }
4241  /*
4242  * Princeton
4243  */
4244  else if (INFILE(_LT_PRINCETON) && NOT_INFILE(_TITLE_WORDNET)) {
4245  if (INFILE(_CR_PRINCETON)) {
4246  INTERESTING("Princeton");
4247  }
4248  else {
4249  INTERESTING("Princeton-style");
4250  }
4251  }
4252  /*
4253  * University of Michigan
4254  */
4255  else if (INFILE(_LT_UMICHIGAN_1)) {
4256  if (INFILE(_CR_MICHIGAN)) {
4257  INTERESTING(lDebug ? "U-Mich(1)" : "U-Michigan");
4258  }
4259  else {
4260  INTERESTING(lDebug ? "U-Mich-style(1)" : "U-Mich-style");
4261  }
4262  }
4263  else if (INFILE(_LT_UMICHIGAN_2)) {
4264  if (INFILE(_CR_MICHIGAN)) {
4265  INTERESTING(lDebug ? "U-Mich(2)" : "U-Michigan");
4266  }
4267  else {
4268  INTERESTING(lDebug ? "U-Mich-style(2)" : "U-Mich-style");
4269  }
4270  }
4271  /*
4272  * Southern Cal
4273  */
4274  else if (INFILE(_LT_USC_NC)) {
4275  if (INFILE(_CR_USC)) {
4276  INTERESTING("USC.Non-commercial");
4277  }
4278  else {
4279  INTERESTING(lDebug ? "NonC(5)" : "Non-commercial");
4280  }
4281  }
4282  else if (INFILE(_LT_USC)) {
4283  if (INFILE(_CR_USC)) {
4284  INTERESTING("USC");
4285  }
4286  else {
4287  INTERESTING("USC-style");
4288  }
4289  }
4290  /*
4291  * Unversity Corporation for Atmospheric Research (UCAR)
4292  */
4293  else if (INFILE(_LT_UCAR_1) && INFILE(_LT_UCAR_2)) {
4294  INTERESTING("UCAR");
4295  }
4296  else if (INFILE(_LT_UCAR_3) && INFILE(_CR_UCAR)) {
4297  if (INFILE(_CR_UCAR)) {
4298  INTERESTING("UCAR");
4299  }
4300  else {
4301  INTERESTING("UCAR-style");
4302  }
4303  }
4304  /*
4305  * Stanford
4306  */
4307  else if (INFILE(_LT_STANFORD)) {
4308  if (INFILE(_CR_STANFORD)) {
4309  INTERESTING("Stanford");
4310  }
4311  else {
4312  INTERESTING("Stanford-style");
4313  }
4314  }
4315  /*
4316  * U-Cambridge
4317  */
4318  else if (INFILE(_LT_CAMBRIDGE)) {
4319  if (HASTEXT(_LT_MSNTP, 0)) {
4320  INTERESTING("MSNTP");
4321  }
4322  else if (INFILE(_CR_CAMBRIDGE_1) || INFILE(_CR_CAMBRIDGE_2)) {
4323  INTERESTING("U-Cambridge");
4324  }
4325  else {
4326  INTERESTING("U-Cambridge-style");
4327  }
4328  }
4329  /*
4330  * Columbia University
4331  */
4332  else if (INFILE(_CR_COLUMBIA) && INFILE(_LT_COLUMBIA)) {
4333  INTERESTING("U-Columbia");
4334  }
4335  /*
4336  * University of Notre Dame (Different from Boost!)
4337  */
4338  if (INFILE(_LT_ND_1)) {
4339  if (INFILE(_CR_NOTREDAME)) {
4340  INTERESTING(lDebug ? "ND(1)" : "NotreDame");
4341  }
4342  else {
4343  INTERESTING(lDebug ? "ND-style(1)" : "NotreDame-style");
4344  }
4345  }
4346  else if (INFILE(_LT_ND_2)) {
4347  if (INFILE(_CR_NOTREDAME)) {
4348  INTERESTING(lDebug ? "ND(2)" : "NotreDame");
4349  }
4350  else {
4351  INTERESTING(lDebug ? "ND-style(2)" : "NotreDame-style");
4352  }
4353  }
4354  else if (INFILE(_LT_ND_3)) {
4355  if (INFILE(_CR_NOTREDAME)) {
4356  INTERESTING(lDebug ? "ND(3)" : "NotreDame");
4357  }
4358  else {
4359  INTERESTING(lDebug ? "ND-style(3)" : "NotreDame-style");
4360  }
4361  }
4363  /*
4364  * Boost references
4365  */
4366  if (!lmem[_mMIT] && INFILE(_LT_BOOST_2)) {
4367  if (INFILE(_CR_BOOST)) {
4368  INTERESTING(lDebug ? "Boost(2)" : "BSL-1.0");
4369  }
4370  else {
4371  INTERESTING(lDebug ? "Boost-style(2)" : "BSL-style");
4372  }
4373  }
4374  else if (INFILE(_LT_BOOSTref1)) {
4375  if (INFILE(_TITLE_BOOST10) || INFILE(_PHR_BOOST_V10) ||
4376  URL_INFILE(_URL_BOOST_10)) {
4377  INTERESTING(lDebug ? "Boost1.0(ref)" : "BSL-1.0");
4378  }
4379  else {
4380  INTERESTING(lDebug ? "Boost(ref)" : "BSL-1.0");
4381  }
4382  }
4383  else if (INFILE(_LT_BOOST_GRAPH)) {
4384  INTERESTING(lDebug ? "Boost(graph)" : "BSL-1.0");
4385  }
4386  else if (INFILE(_LT_BOOST_LAMBDA)) {
4387  INTERESTING(lDebug ? "Boost(lambda)" : "BSL-1.0");
4388  }
4389  else if (URL_INFILE(_URL_BOOST_10)) {
4390  INTERESTING(lDebug ? "Boost-1.0(ref)" : "BSL-1.0");
4391  }
4392  /*
4393  * Sleepycat NON-Commerical
4394  */
4395  else if (INFILE(_LT_SLEEPYCAT_NC)) {
4396  INTERESTING("Sleepycat.Non-commercial");
4397  }
4399  /*
4400  * Vim license
4401  */
4402  if ((INFILE(_LT_Vim_1) || INFILE(_LT_Vim_2)) && INFILE(_TITLE_Vim)) {
4403  INTERESTING("Vim");
4404  }
4405  else if (INFILE(_PHR_Vim)) {
4406  INTERESTING("Vim");
4407  }
4409  /*
4410  * Vixie license
4411  */
4412  if (INFILE(_LT_VIXIE)) {
4413  INTERESTING("Vixie-license");
4414  }
4416  /*
4417  * Yahoo!
4418  */
4419  if (INFILE(_LT_YAHOO_1)) {
4420  if (INFILE(_LT_YAHOO_BINARY)) {
4421  INTERESTING("Yahoo-EULA");
4422  }
4423  else {
4424  INTERESTING("YPL");
4425  }
4426  }
4427  if(INFILE(_TITLE_YPL_V10)) {
4428  INTERESTING("YPL-1.0");
4429  }
4430  else if(INFILE(_TITLE_YPL_V11)) {
4431  INTERESTING("YPL-1.1");
4432  }
4434  /*
4435  * Public Use
4436  */
4437  if (INFILE(_LT_PUBLIC_USE)) {
4438  if (INFILE(_TITLE_PUBUSE_V10)) {
4439  INTERESTING("Public-Use-1.0");
4440  }
4441  else {
4442  INTERESTING("Public-Use");
4443  }
4444  }
4446  /*
4447  * Apple
4448  */
4449  if (INFILE(_TEXT_APPLE)) {
4450  if (INFILE(_LT_MIT_12)) {
4451  INTERESTING(lDebug ? "Apple MIT License" : "AML");
4452  }
4453  else if (INFILE(_LT_APPLE_1)) {
4454  INTERESTING(lDebug ? "Apple(1)" : "Apple");
4455  }
4456  else if (INFILE(_LT_APPLE_2)) {
4457  INTERESTING(lDebug ? "Apple(2)" : "Apple");
4458  }
4459  else if (INFILE(_LT_APPLE_3)) { /* squeak license */
4460  INTERESTING(lDebug ? "Apple(3)" : "Apple");
4461  }
4462  else if (INFILE(_LT_APPLE_4)) { /* squeak license */
4463  INTERESTING(lDebug ? "Apple(4)" : "Apple-EULA");
4464  }
4465  else if (INFILE(_LT_APPLE_FONTFORGE)) {
4466  INTERESTING("Apple.FontForge");
4467  }
4468  else if (INFILE(_LT_APPLE_SAMPLE)) {
4469  INTERESTING("Apple.Sample");
4470  }
4471  else if (INFILE(_LT_APSLref1) || INFILE(_LT_APSLref2) ||
4472  INFILE(_TITLE_APSL)) {
4473  if (INFILE(_TITLE_APSL20)) {
4474  INTERESTING("APSL-2.0");
4475  }
4476  else if (INFILE(_TITLE_Ferris)) {
4477  INTERESTING(lDebug ? "Ferris-1.2" : "APSL-style");
4478  }
4479  else if (INFILE(_TITLE_APSL_style)) {
4480  INTERESTING("APSL-style");
4481  }
4482  else if (INFILE(_TITLE_APSL12)) {
4483  INTERESTING("APSL-1.2");
4484  }
4485  else if (INFILE(_TITLE_APSL11)) {
4486  INTERESTING("APSL-1.1");
4487  }
4488  else if (INFILE(_TITLE_APSL10)) {
4489  INTERESTING("APSL-1.0");
4490  }
4491  else {
4492  INTERESTING("APSL");
4493  }
4494  }
4495  else if (INFILE(_LT_ACDL)) {
4496  INTERESTING("ACDL");
4497  }
4498  else if (INFILE(_TITLE_APPLE_SLA)) {
4499  INTERESTING(lDebug ? "Apple(SLA)" : "Apple-EULA");
4500  }
4501  else if (URL_INFILE(_URL_APSL)) {
4502  INTERESTING(lDebug ? "APSL(url)" : "APSL");
4503  }
4504  else if (URL_INFILE(_URL_ACDL)) {
4505  INTERESTING(lDebug ? "ACDL(url)" : "ACDL");
4506  }
4507  }
4509  /*
4510  * Redland
4511  */
4512  if (INFILE(_LT_REDLAND)) {
4513  INTERESTING("Redland");
4514  }
4516  /*
4517  * Red Hat and Fedora
4518  */
4519  if (INFILE(_LT_RH_PKGS)) {
4520  if (INFILE(_LT_RH_NONCOMMERCIAL)) {
4521  INTERESTING(lDebug ? "RH(NC)" : "RedHat.Non-commercial");
4522  lmem[_mREDHAT] = 1;
4523  }
4524  else if (INFILE(_LT_RH_FEDORA)) {
4525  INTERESTING(lDebug ? "Fedora(1)" : "Fedora");
4526  lmem[_mREDHAT] = 1;
4527  }
4528  }
4529  else if (INFILE(_LT_RH_REDHAT)) {
4530  INTERESTING(lDebug ? "RH(2)" : "RedHat");
4531  lmem[_mREDHAT] = 1;
4532  }
4533  else if (INFILE(_LT_RH_SPECIFIC)) {
4534  INTERESTING(lDebug ? "RH(4)" : "RedHat-specific");
4535  lmem[_mREDHAT] = 1;
4536  }
4537  else if (INFILE(_LT_FEDORA)) {
4538  INTERESTING(lDebug ? "Fedora(2)" : "Fedora");
4539  lmem[_mREDHAT] = 1;
4540  }
4541  else if (INFILE(_LT_FEDORA_CLA) || INFILE(_TITLE_FEDORA_CLA)) {
4542  INTERESTING("FedoraCLA");
4543  lmem[_mREDHAT] = 1;
4544  }
4545  else if (INFILE(_CR_REDHAT)) {
4546  if (INFILE(_LT_RH_1)) {
4547  INTERESTING(lDebug ? "RH(1)" : "RedHat");
4548  lmem[_mREDHAT] = 1;
4549  }
4550  else if (INFILE(_LT_RH_EULA)) {
4551  INTERESTING("RedHat-EULA");
4552  lmem[_mREDHAT] = 1;
4553  }
4554  }
4556  /*
4557  * SUSE/Novell/UnitedLinux
4558  */
4559  if (INFILE(_CR_SUSE) && INFILE(_PHR_YAST_CR)) {
4560  INTERESTING("YaST.SuSE");
4561  }
4562  else if (INFILE(_TITLE_NOVELL_EULA)) {
4563  INTERESTING("Novell-EULA");
4564  }
4565  else if (INFILE(_TITLE_UL_EULA)) {
4566  INTERESTING("UnitedLinux-EULA");
4567  }
4568  else if (INFILE(_LT_NOVELL)) {
4569  INTERESTING("Novell");
4570  lmem[_fIP] = 1;
4571  }
4572  else if (INFILE(_LT_NOVELL_IP_1)) {
4573  INTERESTING(lDebug ? "Novell-IP(1)" : "Novell-IP");
4574  lmem[_fIP] = 1;
4575  }
4576  else if (INFILE(_LT_NOVELL_IP_2)) {
4577  INTERESTING(lDebug ? "Novell-IP(2)" : "Novell-IP");
4578  lmem[_fIP] = 1;
4579  }
4581  /*
4582  * Epson Public license
4583  */
4584  if (INFILE(_LT_EPSON_PL) && INFILE(_TITLE_EPSON_PL)) {
4585  INTERESTING("Epson-PL");
4586  }
4587  else if (INFILE(_LT_EPSON_EULA) && INFILE(_TITLE_EPSON_EULA)) {
4588  INTERESTING("Epson-EULA");
4589  }
4591  /*
4592  * Open Publication license
4593  */
4594  if (INFILE(_LT_OPENPUBL_1) || INFILE(_LT_OPENPUBL_2)) {
4595  if (INFILE(_TITLE_OPENPUBL04)) {
4596  INTERESTING("Open-PL-0.4");
4597  }
4598  else if (INFILE(_TITLE_OPENPUBL10) || URL_INFILE(_URL_OPEN_PL_V10)) {
4599  INTERESTING("Open-PL-1.0");
4600  }
4601  else if (INFILE(_TITLE_OPENPUBL)) {
4602  INTERESTING("Open-PL");
4603  }
4604  else {
4605  INTERESTING("Open-PL-style");
4606  }
4607  }
4608  else if (INFILE(_LT_OPENPUBLref)) {
4609  INTERESTING(lDebug ? "Open-PL(ref)" : "Open-PL");
4610  }
4612  /*
4613  * Free Art License
4614  */
4615  if (INFILE(_LT_FREEART_V10)) {
4616  INTERESTING("FAL-1.0");
4617  }
4618  else if (INFILE(_LT_FREEART_V13)) {
4619  INTERESTING("FAL-1.3");
4620  }
4622  /*
4623  * RSA Security, Inc.
4624  */
4625  if (INFILE(_LT_RSA_4)) {
4626  INTERESTING(lDebug ? "RSA(4)" : "RSA-MD");
4627  }
4628  else if (INFILE(_LT_RSA_5)) {
4629  INTERESTING(lDebug ? "RSA(5)" : "RSA-DNS");
4630  }
4631  else if (INFILE (_LT_RSA_CRYPTOKI_1) && INFILE(_LT_RSA_CRYPTOKI_2)){
4632  INTERESTING("RSA-Cryptoki");
4633  }
4634  else if (INFILE(_LT_RSA_3)) {
4635  INTERESTING(lDebug ? "RSA(3)" : "RSA-Security");
4636  }
4637  else if (INFILE(_CR_RSA)) {
4638  if (INFILE(_LT_RSA_1)) {
4639  INTERESTING(lDebug ? "RSA(1)" : "RSA-Security");
4640  }
4641  else if (INFILE(_LT_RSA_2)) {
4642  INTERESTING(lDebug ? "RSA(2)" : "RSA-Security");
4643  }
4644  }
4646  /* Some licenses only deal with fonts */
4647  if (HASTEXT(_TEXT_FONT, 0)) {
4648  /*
4649  * AGFA Monotype
4650  */
4651  if (INFILE(_LT_AGFA)) {
4652  INTERESTING("AGFA.RESTRICTED");
4653  }
4654  else if (INFILE(_LT_AGFA_EULA)) {
4655  INTERESTING("AGFA-EULA");
4656  }
4657  /*
4658  * Bigelow and Holmes
4659  */
4660  if (INFILE(_LT_BH_FONT)) {
4661  if (INFILE(_CR_BH)) {
4662  INTERESTING("BH-Font");
4663  }
4664  else {
4665  INTERESTING("BH-Font-style");
4666  }
4667  }
4669  /*
4670  * BIZNET
4671  */
4672  if (INFILE(_LT_BIZNET)) {
4673  if (INFILE(_CR_BIZNET)) {
4674  INTERESTING("BIZNET");
4675  }
4676  else {
4677  INTERESTING("BIZNET-style");
4678  }
4679  }
4681  /*
4682  * BITSTREAM
4683  */
4684  if (INFILE(_LT_BITSTREAM_1)) {
4685  INTERESTING(lDebug ? "Bitstream(2)" : "Bitstream");
4686  }
4687  else if (INFILE(_LT_BITSTREAM_2)) {
4688  INTERESTING(lDebug ? "Bitstream(3)" : "Bitstream");
4689  }
4691  /*
4692  * Larabie Fonts
4693  */
4694  if (INFILE(_LT_LARABIE_EULA) && INFILE(_TITLE_LARABIE_EULA)) {
4695  INTERESTING("Larabie-EULA");
4696  }
4698  /*
4699  * Arphic Public License
4700  */
4701  if (INFILE(_LT_ARPHIC)) {
4702  if (INFILE(_CR_ARPHIC)) {
4703  INTERESTING("Arphic-Font-PL");
4704  }
4705  else {
4706  INTERESTING("Arphic-style");
4707  }
4708  }
4709  }
4711  /*
4712  * Baekmuk Fonts and Hwan Design
4713  */
4714  if (INFILE(_LT_BAEKMUK_1)) {
4715  INTERESTING("Baekmuk-Font");
4716  }
4717  else if (INFILE(_LT_BAEKMUK_2)) {
4718  INTERESTING("Baekmuk.Hwan");
4719  }
4721  /*
4722  * Baserow Enterprise Edition License
4723  */
4724  if (INFILE(_LT_BASEROW_EE) || INFILE(_LT_BASEROW_EE_2)) {
4725  INTERESTING("Baserow-EE");
4726  }
4728  /*
4729  * Baserow Premium Edition License
4730  */
4731  if (INFILE(_LT_BASEROW_PE) || INFILE(_LT_BASEROW_PE_2)) {
4732  INTERESTING("Baserow-PE");
4733  }
4735  /*
4736  * Information-Technology Promotion Agency (IPA)
4737  */
4738  if (INFILE(_LT_IPA_EULA)) {
4739  INTERESTING("IPA-Font-EULA");
4740  }
4742  /*
4743  * AT&T
4744  */
4745  if (INFILE(_LT_ATT_1)) {
4746  if (INFILE(_CR_ATT)) {
4747  INTERESTING(lDebug ? "ATT(1)" : "ATT");
4748  }
4749  else {
4750  INTERESTING(lDebug ? "ATT-style(1)" : "ATT-style");
4751  }
4752  }
4753  else if (INFILE(_LT_ATT_2)) {
4754  if (!lmem[_fBSD] && INFILE(_CR_BSDCAL)) {
4755  INTERESTING(lDebug ? "BSD(14)" : "BSD");
4756  lmem[_fBSD] = 1;
4757  }
4758  else if (INFILE(_CR_ATT) || INFILE(_CR_LUCENT)) {
4759  INTERESTING(lDebug ? "ATT(2)" : "ATT");
4760  }
4761  else {
4762  INTERESTING(lDebug ? "ATT-style(2)" : "ATT-style");
4763  }
4764  }
4765  else if (INFILE(_LT_ATT_SRC_1) || INFILE(_LT_ATT_SRC_2)) {
4766  if (INFILE(_TITLE_ATT_SRC_12D)) {
4767  INTERESTING("ATT-Source-1.2d");
4768  }
4769  else if (INFILE(_TITLE_ATT_SRC_10)) {
4770  INTERESTING("ATT-Source-1.0");
4771  }
4772  else {
4773  INTERESTING("ATT-Source");
4774  }
4775  }
4776  else if (INFILE(_LT_ATT_NONCOMMERC1) || INFILE(_LT_ATT_NONCOMMERC2)) {
4777  INTERESTING("ATT.Non-commercial");
4778  }
4780  /*
4781  * Silicon Graphics
4782  */
4783  if (INFILE(_TITLE_SGI_V10)) {
4784  INTERESTING("SGI-B-1.0");
4785  }
4786  else if (INFILE(_TITLE_SGI_V11)) {
4787  INTERESTING("SGI-B-1.1");
4788  }
4789  else if (INFILE(_TITLE_SGI_V20)) {
4790  INTERESTING("SGI-B-2.0");
4791  }
4792  else if (INFILE(_LT_SGI_1)) {
4793  if (HASTEXT(_PHR_SGI_LIBTIFF, REG_EXTENDED)) {
4794  INTERESTING("libtiff");
4795  }
4796  else if (HASTEXT(_PHR_LIBTIFF_STYLE, REG_EXTENDED)) {
4797  INTERESTING("libtiff-style");
4798  }
4799  }
4800  else if (INFILE(_LT_SGI_2)) {
4801  if (INFILE(_LT_SGI_V10)) {
4802  INTERESTING("SGI-B-1.0");
4803  }
4804  else if (INFILE(_LT_SGI_V11)) {
4805  INTERESTING("SGI-B-1.1");
4806  }
4807  else if (INFILE(_LT_SGI_V20)) {
4808  INTERESTING("SGI-B-2.0");
4809  }
4810  else if (INFILE(_CR_SGI) || URL_INFILE(_URL_SGI)) {
4811  INTERESTING("SGI");
4812  }
4813  }
4814  else if (INFILE(_LT_SGI_1)) {
4815  if (INFILE(_CR_SGI) || URL_INFILE(_URL_SGI)) {
4816  INTERESTING("SGI-style");
4817  }
4818  }
4819  else if (INFILE(_LT_SGI_FREEW)) {
4820  INTERESTING("SGI-Freeware");
4821  }
4822  else if (INFILE(_LT_SGI_GLX)) {
4823  if (INFILE(_TITLE_SGI_GLX_V10)) {
4824  INTERESTING(lDebug ? "SGI_GLX(1.0)" : "SGI_GLX-1.0");
4825  }
4826  else {
4827  INTERESTING("SGI_GLX");
4828  }
4829  }
4830  else if (INFILE(_LT_SGI_GLXref) && INFILE(_CR_SGI)) {
4831  if (INFILE(_TITLE_SGI_GLX_V10)) {
4832  INTERESTING(lDebug ? "SGI_GLX(10ref)" : "SGI_GLX-1.0");
4833  }
4834  else {
4835  INTERESTING(lDebug ? "SGI_GLX(ref)" : "SGI_GLX");
4836  }
4837  }
4838  else if (INFILE(_LT_SGI_PROPRIETARY) && INFILE(_CR_SGI)) {
4839  INTERESTING("SGI-Proprietary");
4840  }
4842  /*
4843  * 3DFX (Glide)
4844  */
4845  if (INFILE(_CR_3DFX_1) || INFILE(_CR_3DFX_2)) {
4846  if (INFILE(_LT_GLIDE_3DFX)) {
4847  INTERESTING("Glide");
4848  }
4849  else if (INFILE(_LT_GLIDE_GPL)) {
4850  INTERESTING("3DFX-PL");
4851  }
4852  }
4853  /*
4854  * Nvidia Corp
4855  */
4856  else if (INFILE(_LT_NVIDIA_EULA_3)) {
4857  INTERESTING(lDebug ? "Nvidia(1)" : "Nvidia-EULA-a");
4858  }
4859  else if (INFILE(_CR_NVIDIA) && INFILE(_LT_NVIDIA)) {
4860  INTERESTING(lDebug ? "Nvidia(2)" : "Nvidia");
4861  }
4862  else if (INFILE(_LT_NVIDIA_EULA_2)) {
4863  INTERESTING(lDebug ? "Nvidia(3)" : "Nvidia-EULA-b");
4864  }
4865  else if (INFILE(_LT_NVIDIA_EULA_1) || INFILE(_TITLE_NVIDIA)) {
4866  INTERESTING(lDebug ? "Nvidia(4)" : "Nvidia-EULA-b");
4867  }
4868  else if (INFILE(_LT_NVIDIA_1)) {
4869  INTERESTING(lDebug ? "Nvidia(5)" : "Nvidia");
4870  }
4871  /*
4872  * ATI Corp
4873  */
4874  else if (INFILE(_TITLE_ATI_EULA) && INFILE(_LT_ATI_EULA)) {
4875  INTERESTING("ATI-EULA");
4876  }
4877  /*
4878  * Agere Systems
4879  */
4880  else if (INFILE(_TITLE_AGERE_EULA) && INFILE(_LT_AGERE_EULA)) {
4881  INTERESTING("Agere-EULA");
4882  }
4884  /*
4885  * KD Tools, AB
4886  */
4887  if (INFILE(_TITLE_KDAB_EULA)) {
4888  if (INFILE(_LT_KDAB_1)) {
4889  INTERESTING(lDebug ? "KDAB(1)" : "KD-Tools-EULA");
4890  }
4891  if (INFILE(_LT_KDAB_2)) {
4892  INTERESTING(lDebug ? "KDAB(2)" : "KD-Tools-EULA");
4893  }
4894  }
4896  /*
4897  * KDE
4898  */
4899  if (INFILE(_PHR_KDE_FILE) && INFILE(_LT_KDE)) {
4900  INTERESTING("KDE");
4901  }
4903  /*
4904  * Broadcom
4905  */
4906  if (INFILE(_LT_BROADCOM_EULA) && INFILE(_CR_BROADCOM)) {
4907  INTERESTING("Broadcom-EULA");
4908  }
4910  /*
4911  * DARPA (Defense Advanved Research Projects Agency)
4912  */
4913  if (INFILE(_LT_DARPA_COUGAAR_1)) {
4914  INTERESTING("DARPA-Cougaar");
4915  }
4916  else if (INFILE(_LT_DARPA)) {
4917  INTERESTING("DARPA");
4918  }
4920  /*
4921  * Tektronix
4922  */
4923  if (INFILE(_LT_TEKTRONIX)) {
4924  if (INFILE(_CR_TEKTRONIX)) {
4925  INTERESTING("Tektronix");
4926  }
4927  else {
4928  INTERESTING("Tektronix-style");
4929  }
4930  }
4932  /*
4933  * Alliance for Open Media Patent License
4934  */
4935  if (INFILE(_LT_AOM_Patent)) {
4936  INTERESTING("Alliance for Open Media Patent License 1.0");
4937  }
4939  /*
4940  * Open Market, Inc
4941  */
4942  if (INFILE(_LT_CADENCE) && INFILE(_CR_CADENCE)) {
4943  INTERESTING("Cadence");
4944  }
4946  /*
4947  * Open Market, Inc
4948  */
4949  if (INFILE(_LT_OPENMKT)) {
4950  INTERESTING("OpenMarket");
4951  }
4953  /*
4954  * Unicode
4955  */
4956  if (!lmem[_fUNICODE]) {
4957  if (INFILE(_TITLE_UNICODE)) {
4958  INTERESTING(lDebug ? "Unicode(4)" : "Unicode");
4959  }
4960  else if (INFILE(_LT_UNICODE_1) && INFILE(_CR_UNICODE)) {
4961  INTERESTING(lDebug ? "Unicode(1)" : "Unicode");
4962  }
4963  else if (INFILE(_LT_UNICODE_2)) {
4964  INTERESTING(lDebug ? "Unicode(2)" : "Unicode");
4965  }
4966  else if (INFILE(_LT_UNICODE_3)) {
4967  INTERESTING(lDebug ? "Unicode(3)" : "Unicode");
4968  }
4969  else if (INFILE(_LT_UNICODE_4)) {
4970  INTERESTING(lDebug ? "Unicode(4)" : "Unicode-TOU");
4971  }
4972  else if (URL_INFILE(_URL_UNICODE)) {
4973  INTERESTING(lDebug ? "Unicode(5)" : "Unicode-TOU");
4974  }
4975  else if (INFILE(_TITLE_UNICODE_TOU) && INFILE(_LT_UNICODE_TOU)) {
4976  INTERESTING("Unicode-TOU");
4977  }
4979  }
4980  /*
4981  * Software Research Assoc
4982  */
4983  if (INFILE(_LT_SRA) && INFILE(_CR_SRA)) {
4984  INTERESTING("SW-Research");
4985  }
4987  /*
4988  * MITRE Collaborative Virtual Workspace (CVW) License
4989  */
4990  if (INFILE(_LT_MITRE_1)) {
4991  if (INFILE(_CR_MITRE)) {
4992  INTERESTING(lDebug ? "MitreCVW(1)" : "MitreCVW");
4993  }
4994  else if (INFILE(_TITLE_CVW)) {
4995  INTERESTING(lDebug ? "MitreCVW(2)" : "MitreCVW");
4996  }
4997  else {
4998  INTERESTING("MitreCVW-style");
4999  }
5000  }
5001  else if (INFILE(_LT_MITRE_2)) {
5002  INTERESTING(lDebug ? "Mitre(2)" : "Mitre");
5003  }
5005  /*
5006  * Jabber, Motosoto
5007  */
5008  if (INFILE(_LT_JABBER_1)) {
5009  if (INFILE(_TITLE_MOTOSOTO091)) {
5010  INTERESTING("Motosoto");
5011  }
5012  else if (INFILE(_TITLE_JABBER)) {
5013  INTERESTING("Jabber");
5014  }
5015  }
5016  else if (INFILE(_LT_JABBER_2)) {
5017  if (INFILE(_TITLE_JABBER_V10)) {
5018  INTERESTING(lDebug ? "Jabber(1.0)" : "Jabber-1.0");
5019  }
5020  else {
5021  INTERESTING(lDebug ? "Jabber(2)" : "Jabber");
5022  }
5023  }
5024  else if (URL_INFILE(_URL_JABBER)) {
5025  INTERESTING(lDebug ? "Jabber(url)" : "Jabber");
5026  }
5028  /*
5029  * CPL, Lucent Public License, Eclipse PL
5030  */
5031  int _epl = 0;
5032  if (INFILE(_LT_CPL_1) || INFILE(_LT_CPL_2)) {
5033  if (INFILE(_TITLE_IBM_PL20)) {
5034  INTERESTING("IPL-2.0");
5035  }
5036  else if (INFILE(_TITLE_IBM_PL10)) {
5037  INTERESTING("IPL-1.0");
5038  }
5039  else if (INFILE(_TITLE_IBM_PL)) {
5040  INTERESTING("IPL");
5041  }
5042  else if (INFILE(_TITLE_OpenGroup)) {
5043  INTERESTING("OpenGroup");
5044  }
5045  else if (INFILE(_TITLE_EPL10)) {
5046  INTERESTING(lDebug ? "Eclipse(v.0#1)" : "EPL-1.0");
5047  _epl = 1;
5048  }
5049  else if (INFILE(_TITLE_EPL20)) {
5050  INTERESTING(lDebug ? "Eclipse(v.2#1)" : "EPL-2.0");
5051  _epl = 1;
5052  }
5053  else if (INFILE(_TITLE_EPL) && NOT_INFILE(_TITLE_EPL_IGNORE)) {
5054  INTERESTING(lDebug ? "Eclipse(#1)" : "EPL");
5055  _epl = 1;
5056  }
5057  else if (INFILE(_TITLE_LUCENT102)) {
5058  INTERESTING("LPL-1.02");
5059  }
5060  else if (INFILE(_TITLE_LUCENT10)) {
5061  INTERESTING("LPL-1.0");
5062  }
5063  else if (NOT_INFILE(_LT_CA)) {
5064  cp = CPLVERS();
5065  INTERESTING(lDebug ? "CPL(#1)" : cp);
5066  }
5067  }
5068  else if (INFILE(_LT_LPL_102)) {
5069  INTERESTING("LPL-1.02");
5070  }
5071  else if (!lmem[_fREAL] && INFILE(_LT_CPLref1) && NOT_INFILE(_TITLE_EPL10)) {
5072  cp = CPLVERS();
5073  INTERESTING(lDebug ? "CPL(ref)" : cp);
5074  }
5075  else if (URL_INFILE(_URL_CPL)) {
5076  cp = CPLVERS();
5077  INTERESTING(lDebug ? "CPL(url)" : cp);
5078  }
5079  else if (INFILE(_PHR_CPL_05)) {
5080  INTERESTING(lDebug ? "CPL(0.5)" : "CPL-0.5");
5081  }
5082  else if (INFILE(_PHR_CPL_10)) {
5083  INTERESTING(lDebug ? "CPL(0.5)" : "CPL-1.0");
5084  }
5085  else if (INFILE(_LT_IBM_PLref1)) {
5086  INTERESTING(lDebug ? "IBM-PL(ref)" : "IPL");
5087  }
5088  else if (URL_INFILE(_URL_IBM_PL)) {
5089  INTERESTING(lDebug ? "IBM-PL(url)" : "IPL");
5090  }
5092  /* More EPL cases */
5093  if (!_epl) {
5094  if (INFILE(_LT_EPL20ref_1)) {
5095  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-2.0");
5096  }
5097  else if (INFILE(_LT_EPL10ref_1) || INFILE(_LT_EPL10ref_2) || HASTEXT(_LT_EPL10ref_3, REG_EXTENDED)) {
5098  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-1.0");
5099  }
5100  else if (INFILE(_LT_EPLref)) {
5101  if (INFILE(_TITLE_EPL10)) {
5102  INTERESTING(lDebug ? "Eclipse(v.0#2)" : "EPL-1.0");
5103  }
5104  else if (INFILE(_TITLE_EPL20)) {
5105  INTERESTING(lDebug ? "Eclipse(v.2#2)" : "EPL-2.0");
5106  }
5107  else {
5108  INTERESTING(lDebug ? "Eclipse(#2)" : "EPL");
5109  }
5110  }
5111  else if (INFILE(_LT_EPL10ref_1)) {
5112  INTERESTING(lDebug ? "Eclipse(ref#2)" : "EPL-1.0");
5113  }
5114  else if (INFILE(_LT_EPL) && NOT_INFILE(_TITLE_EPL_IGNORE)) {
5115  if (INFILE(_TITLE_EPL10ref_1)) {
5116  INTERESTING(lDebug ? "Eclipse(v1.0#2)" : "EPL-1.0");
5117  }
5118  if (INFILE(_TITLE_EPL20ref_1)) {
5119  INTERESTING(lDebug ? "Eclipse(v1.0#2)" : "EPL-2.0");
5120  }
5121  }
5122  }
5124  /*
5125  * SyBase/Watcom
5126  */
5127  if (INFILE(_LT_SYBASE)) {
5128  if (INFILE(_TITLE_SYBASE10)) {
5129  INTERESTING("Watcom-1.0");
5130  }
5131  else {
5132  INTERESTING("Watcom");
5133  }
5134  }
5136  /*
5137  * Ricoh
5138  */
5139  if (INFILE(_LT_RICOH)) {
5140  if (INFILE(_TITLE_RICOH10)) {
5141  INTERESTING("RSCPL");
5142  }
5143  }
5145  /*
5146  * OCLC
5147  */
5148  if (INFILE(_LT_OCLC)) {
5149  if (INFILE(_TITLE_OCLC20)) {
5150  INTERESTING("OCLC-2.0");
5151  }
5152  else if (INFILE(_TITLE_OCLC10)) {
5153  INTERESTING("OCLC-1.0");
5154  }
5155  else {
5156  INTERESTING("OCLC");
5157  }
5158  }
5160  /*
5161  * Educational Community License
5162  */
5163  if (INFILE(_LT_ECL1)) {
5164  INTERESTING("ECL-1.0");
5165  lmem[_mMIT] = 1;
5166  }
5167  else if (INFILE(_LT_ECL2)) {
5168  INTERESTING("ECL-2.0");
5169  lmem[_mMIT] = 1;
5170  }
5171  else if (INFILE(_LT_ECL)) {
5172  INTERESTING(lDebug ? "ECL(1)" : "ECL-1.0");
5173  lmem[_mMIT] = 1;
5174  }
5176  /*
5177  * EU DataGrid and Condor PL
5178  */
5179  if (INFILE(_LT_EU)) {
5180  if (INFILE(_TITLE_CONDOR_V10)) {
5181  INTERESTING("Condor-1.0");
5182  } else if (INFILE(_TITLE_CONDOR_V11)) {
5183  INTERESTING("Condor-1.1");
5184  }
5185  else {
5186  INTERESTING("EUDatagrid");
5187  }
5188  }
5189  else if (URL_INFILE(_URL_EUDatagrid)) {
5190  INTERESTING("EUDatagrid");
5191  }
5193  /*
5194  * Adaptive Public License
5195  */
5196  if (INFILE(_LT_ADAPTIVE)) {
5197  if (INFILE(_TITLE_ADAPTIVE10)) {
5198  INTERESTING("APL-1.0");
5199  }
5200  else {
5201  INTERESTING("APL");
5202  }
5203  lmem[_fAPL] = 1;
5204  }
5206  /*
5207  * gSOAP Public License
5208  */
5209  if (!lmem[_mGSOAP] && INFILE(_LT_GSOAPref13)) {
5210  INTERESTING("gSOAP-1.3b");
5211  }
5212  else if (!lmem[_mGSOAP] && INFILE(_LT_GSOAPref)) {
5213  INTERESTING("gSOAP");
5214  }
5216  /*
5217  * Computer Associates
5218  */
5219  if (INFILE(_LT_CA)) {
5220  if (INFILE(_TITLE_CA11)) {
5221  INTERESTING("CATOSL-1.1");
5222  }
5223  else {
5224  INTERESTING("CA");
5225  }
5226  }
5227  else if (INFILE(_TITLE_CA)) {
5228  INTERESTING("CATOSL");
5229  }
5231  /*
5232  * Frameworx
5233  */
5234  if (INFILE(_LT_FRAMEWORX)) {
5235  if (INFILE(_TITLE_FRAMEWORX10)) {
5236  INTERESTING("Frameworx-1.0");
5237  }
5238  else {
5239  INTERESTING("Frameworx");
5240  }
5241  }
5243  /*
5244  * NASA
5245  */
5246  if (INFILE(_LT_NASA)) {
5247  if (INFILE(_TITLE_NASA13)) {
5248  INTERESTING("NASA-1.3");
5249  }
5250  else {
5251  INTERESTING("NASA");
5252  }
5253  }
5255  /*
5256  * Freetype
5257  */
5258  if (INFILE(_LT_FREETYPE)) {
5259  if (INFILE(_TITLE_CATHARON)) {
5260  INTERESTING(lDebug ? "Catharon(1)" : "Catharon");
5261  }
5262  else if (INFILE(_CR_CATHARON)) {
5263  INTERESTING(lDebug ? "Catharon(2)" : "Catharon");
5264  }
5265  else if (INFILE(_TITLE_FREETYPE)) {
5266  INTERESTING("FTL");
5267  }
5268  else {
5269  INTERESTING("FTL-style");
5270  }
5271  }
5272  else if (INFILE(_LT_FTL)) {
5273  INTERESTING("FTL");
5274  }
5275  else if (INFILE(_TITLE_FTL)|| INFILE(_SPDX_FTL)) {
5276  INTERESTING("FTL");
5277  }
5278  else if (INFILE(_LT_CATHARON)) {
5279  INTERESTING(lDebug ? "Catharon(3)" : "Catharon");
5280  }
5281  else if (INFILE(_LT_FREETYPEref)) {
5282  INTERESTING(lDebug ? "FTL(ref)" : "FTL");
5283  }
5285  /*
5286  * Eiffel Forum License
5287  */
5288  if (INFILE(_LT_EIFFEL)) {
5289  if (INFILE(_TITLE_EIFFEL2)) {
5290  INTERESTING("EFL-2.0");
5291  }
5292  else if (INFILE(_TITLE_EIFFEL1)) {
5293  INTERESTING("EFL-1.0");
5294  }
5295  else {
5296  INTERESTING("EFL");
5297  }
5298  }
5299  else if (INFILE(_LT_EIFFEL_20)) {
5300  INTERESTING("EFL-2.0");
5301  }
5302  else if (INFILE(_LT_EIFFEL_1)) {
5303  INTERESTING("EFL");
5304  }
5306  /*
5307  * BISON, Nethack, etc.
5308  */
5309  if (!lmem[_fGPL] && (INFILE(_LT_BISON) || INFILE(_LT_BISONref))) {
5310  if (INFILE(_TITLE_NETHACK)) {
5311  INTERESTING("NGPL");
5312  }
5313  else {
5314  INTERESTING("BISON");
5315  }
5316  }
5318  /*
5319  * Open Software License (OSL) and Academic Free License (AFL) are similar
5320  */
5321  if (INFILE(_LT_OSL_BAD)) {
5322  cp = (INFILE(_TITLE_AFL) ? AFLVERS() : OSLVERS());
5323  INTERESTING(lDebug? "OSL(bad)" : cp);
5324  }
5325  else if (INFILE(_LT_OSLref1)) {
5326  cp = OSLVERS();
5327  INTERESTING(lDebug? "OSL(ref1)" : cp);
5328  }
5329  else if (INFILE(_LT_OSLref2)) {
5330  cp = OSLVERS();
5331  INTERESTING(lDebug? "OSL(ref2)" : cp);
5332  }
5333  else if (INFILE(_LT_AFL)) {
5334  cp = (INFILE(_TITLE_AFL) ? AFLVERS() : OSLVERS());
5335  INTERESTING(lDebug? "AFL#1" : cp);
5336  }
5337  else if (INFILE(_TITLE_OSL21) && NOT_INFILE(_TITLE_OSL21_EXHIBIT)) {
5338  cp = OSLVERS();
5339  INTERESTING(lDebug? "OSL(T2.1)" : cp);
5340  }
5341  else if (INFILE(_TITLE_AFL21)) {
5342  cp = AFLVERS();
5343  INTERESTING(lDebug? "AFL(T2.1)" : cp);
5344  }
5345  else if (INFILE(_TITLE_OSL30) && NOT_INFILE(_TITLE_OSL30_EXHIBIT)) {
5346  cp = OSLVERS();
5347  INTERESTING(lDebug? "OSL(T3.0)" : cp);
5348  }
5349  else if (INFILE(_TITLE_AFL30)) {
5350  cp = AFLVERS();
5351  INTERESTING(lDebug? "AFL(T3.0)" : cp);
5352  }
5353  else if (URL_INFILE(_URL_OSL11)) {
5354  INTERESTING(lDebug ? "OSL_v1.1(url)" : "OSL-1.1");
5355  }
5356  else if (URL_INFILE(_URL_OSL)) {
5357  INTERESTING(lDebug ? "OSL(url)" : "OSL");
5358  }
5359  else if (URL_INFILE(_URL_AFL)) {
5360  INTERESTING(lDebug ? "AFL(url)" : "AFL");
5361  }
5363  /*
5364  * There are occasions where something is licensed under *either* AFL
5365  * or OSL, so don't keep AFL-refs in the if-then-else-if chain here.
5366  */
5367  if (INFILE(_LT_AFLref1)) {
5368  cp = AFLVERS();
5369  INTERESTING(lDebug? "AFL(ref1)" : cp);
5370  }
5371  else if (INFILE(_LT_AFLref2)) {
5372  cp = AFLVERS();
5373  INTERESTING(lDebug? "AFL(ref2)" : cp);
5374  }
5376  /*
5377  * Inner Net license
5378  */
5379  if (INFILE(_LT_INNERNET)) {
5380  if (INFILE(_TITLE_INNERNET200)) {
5381  INTERESTING("InnerNet-2.00");
5382  }
5383  else if (HASTEXT(_TEXT_INNERNET, 0)) {
5384  INTERESTING("InnerNet");
5385  }
5386  else {
5387  INTERESTING("InnerNet-style");
5388  }
5389  }
5390  else if (INFILE(_LT_INNERNETref_V2)) {
5391  INTERESTING(lDebug ? "InnetNet(v2ref)" : "InnerNet-2.00");
5392  }
5394  /*
5395  * Open Government Licence
5396  */
5397  if (INFILE(_TITLE_OGL_UK)) {
5398  if (INFILE(_TITLE_OGL_UK_10)) {
5399  INTERESTING("OGL-UK-1.0");
5400  }
5401  else if (INFILE(_TITLE_OGL_UK_20)) {
5402  INTERESTING("OGL-UK-2.0");
5403  }
5404  else if (INFILE(_TITLE_OGL_UK_30)) {
5405  INTERESTING("OGL-UK-3.0");
5406  }
5407  /* Full OGL license texts have reference to Creative Commons */
5408  if (HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
5409  lmem[_fCCBY] = 1;
5410  }
5411  }
5413  /*
5414  * Creative Commons Public License, Mindterm, and the Reciprocal PL
5415  */
5416  if (!lmem[_fCCBY] && HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
5417  cp = CCVERS();
5418  INTERESTING(lDebug ? "CC(ref)" : cp);
5419  }
5420  else if (INFILE(_LT_CCPL)) {
5421  if (INFILE(_LT_RECIP_1) || INFILE(_LT_RECIP_2)) {
5422  if (INFILE(_TITLE_RPL15)) {
5423  INTERESTING(lDebug ? "RPL-1.5#1" : "RPL-1.5");
5424  }
5425  else if (INFILE(_TITLE_RPL11)) {
5426  INTERESTING(lDebug ? "RPL-1.1#1" : "RPL-1.1");
5427  }
5428  else if (INFILE(_TITLE_RPL10)) {
5429  INTERESTING(lDebug ? "RPL-1.0#1" : "RPL-1.0");
5430  }
5431  else {
5432  INTERESTING(lDebug ? "RPL#1" : "RPL");
5433  }
5434  }
5435  }
5436  else if (INFILE(_LT_RECIP15)) {
5437  INTERESTING("RPL-1.5");
5438  }
5439  else if (INFILE(_TITLE_MINDTERM)) {
5440  INTERESTING("MindTerm");
5441  }
5442  else if (INFILE(_LT_RECIP_1) || INFILE(_LT_RECIP_2)) {
5443  if (INFILE(_TITLE_RPL15)) {
5444  INTERESTING(lDebug ? "RPL-1.5#2" : "RPL-1.5");
5445  }
5446  else if (INFILE(_TITLE_RPL11)) {
5447  INTERESTING(lDebug ? "RPL-1.1#2" : "RPL-1.1");
5448  }
5449  else if (INFILE(_TITLE_RPL10)) {
5450  INTERESTING(lDebug ? "RPL-1.0#2" : "RPL-1.0");
5451  }
5452  else {
5453  INTERESTING(lDebug ? "RPL#2" : "RPL");
5454  }
5455  }
5456  /*
5457  * For some reason license text strings were defined for few
5458  * Creative Commons licenses.
5459  */
5460  else if (INFILE(_LT_CC_BY_SA_30)) {
5461  INTERESTING("CC-BY-SA-3.0");
5462  }
5463  else if (INFILE(_LT_CC_BY_SA_25)) {
5464  INTERESTING("CC-BY-SA-2.5");
5465  }
5466  else if (INFILE(_LT_CC_BY_NC_30)) {
5467  INTERESTING("CC-BY-NC-3.0");
5468  }
5469  else if (INFILE(_LT_CC_BY_ND_30)) {
5470  INTERESTING("CC-BY-ND-3.0");
5471  }
5472  else if (INFILE(_PHR_CC_BY_40)) {
5473  INTERESTING("CC-BY-4.0");
5474  }
5476  if (URL_INFILE(_URL_RPL)) {
5477  INTERESTING(lDebug ? "RPL(url)" : "RPL");
5478  }
5479  else if (URL_INFILE(_URL_CCLGPL)) {
5480  cp = LGPLVERS();
5481  INTERESTING(lDebug ? "CC-LGPL(url)" : cp);
5482  }
5483  else if (URL_INFILE(_URL_CCGPL)) {
5484  cp = GPLVERS();
5485  INTERESTING(lDebug ? "CC-GPL(url)" : cp);
5486  }
5488  /*
5489  * SpikeSource
5490  */
5491  if (INFILE(_CR_SPIKESOURCE) && INFILE(_LT_SPIKESOURCE)) {
5492  INTERESTING("SpikeSource");
5493  }
5495  /*
5496  * Legato systems
5497  */
5498  if (INFILE(_LT_LEGATO_1) || INFILE(_LT_LEGATO_2)) {
5499  INTERESTING("Legato");
5500  }
5502  /*
5503  * Paradigm associates
5504  */
5505  if (INFILE(_LT_PARADIGM) && INFILE(_CR_PARADIGM)) {
5506  INTERESTING("Paradigm");
5507  }
5509  /*
5510  * Wintertree Software
5511  */
5512  if (INFILE(_LT_WINTERTREE)) {
5513  INTERESTING("Wintertree");
5514  }
5516  /*
5517  * Genivia
5518  */
5519  if (INFILE(_LT_GENIVIAref)) {
5520  INTERESTING("Genivia.Commercial");
5521  }
5523  /*
5524  * Open Directory License
5525  */
5526  if (INFILE(_LT_ODL)) {
5527  INTERESTING("ODL");
5528  }
5530  /*
5531  * Open Directory License
5532  */
5533  if (INFILE(_LT_OSD)) {
5534  INTERESTING("OSD");
5535  }
5537  /*
5538  * Zveno
5539  */
5540  if (INFILE(_LT_ZVENO) && INFILE(_CR_ZVENO)) {
5541  INTERESTING("Zveno");
5542  }
5544  /*
5545  * Brainstorm
5546  */
5547  if (INFILE(_LT_BRAINSTORM_EULA) && INFILE(_TITLE_BRAINSTORM_EULA)) {
5548  INTERESTING("BrainStorm-EULA");
5549  }
5551  /*
5552  * AOL
5553  */
5554  if (INFILE(_LT_AOL_EULA)) {
5555  INTERESTING("AOL-EULA");
5556  }
5558  /*
5559  * Algorithmics
5560  */
5561  if (INFILE(_LT_ALGORITHMICS)) {
5562  INTERESTING("Algorithmics");
5563  }
5565  /*
5566  * Pixware
5567  */
5568  if (INFILE(_LT_PIXWARE_EULA)) {
5569  INTERESTING("Pixware-EULA");
5570  }
5572  /*
5573  * Compuserve
5574  */
5575  if (HASTEXT(_TEXT_COMPUSERVE, 0) && INFILE(_LT_COMPUSERVE)) {
5576  INTERESTING("CompuServe");
5577  }
5579  /*
5580  * Advanved Micro Devices (AMD)
5581  */
5582  if (INFILE(_LT_AMDPLPA) || INFILE(_LT_AMDPLPA_2)) {
5583  INTERESTING("AMDPLPA");
5584  }
5585  else if (INFILE(_LT_RADEON_FIRM) || INFILE(_LT_RADEON_FIRM_2)) {
5586  INTERESTING("Radeon-rlx");
5587  }
5588  else if (INFILE(_LT_AMD_SEV) || INFILE(_LT_AMD_SEV_2) || INFILE(_TITLE_AMD_SEV)) {
5589  INTERESTING("AMD-SEV");
5590  }
5591  else if (INFILE(_LT_AMD)) {
5592  INTERESTING("AMD");
5593  }
5594  else if (INFILE(_LT_AMD_EULA) && INFILE(_TITLE_AMD_EULA)) {
5595  INTERESTING("AMD-EULA");
5596  }
5598  /*
5599  * Acki Nacki Gossip Igniter (ANGI) License
5600  */
5601  if (INFILE(_LT_ANGI) || INFILE(_LT_ANGI_2)) {
5602  INTERESTING("ANGI");
5603  }
5605  /*
5606  * OMRON Corp
5607  */
5608  if ((INFILE(_CR_OMRON_1) || INFILE(_CR_OMRON_2)) &&
5609  (INFILE(_LT_OMRON1) || INFILE(_LT_OMRON2))) {
5610  INTERESTING(lDebug ? "OMRON(2)" : "OMRON");
5611  }
5613  /*
5614  * MetroLink
5615  */
5616  if (INFILE(_TITLE_METROLINK)) {
5617  if (INFILE(_LT_METRO)) {
5618  if (INFILE(_LT_METRO_NONFREE)) {
5619  INTERESTING("MetroLink-nonfree");
5620  }
5621  else {
5622  INTERESTING("MetroLink");
5623  }
5624  }
5625  }
5626  else if (INFILE(_LT_METROLINKref)) {
5627  INTERESTING(lDebug ? "MetroLink(ref)" : "MetroLink");
5628  }
5630  /*
5631  * University of Edinburgh (and a CMU derivative)
5632  */
5633  if (INFILE(_LT_EDINBURGH_1)) {
5634  if (mCR_CMU()) {
5635  INTERESTING(lDebug ? "CMU(3)" : "CMU");
5636  lmem[_mCMU] = 1;
5637  }
5638  else if (mCR_EDIN()) {
5639  INTERESTING(lDebug ? "U-Edinburgh(1)" : "U-Edinburgh");
5640  }
5641  else {
5642  INTERESTING(lDebug ? "UE-style(1)" : "U-Edinburgh-style");
5643  }
5644  }
5645  else if (INFILE(_LT_EDINBURGH_2)) {
5646  if (mCR_EDIN()) {
5647  INTERESTING(lDebug ? "U-Edinburgh(2)" : "U-Edinburgh");
5648  }
5649  else {
5650  INTERESTING(lDebug ? "UE-style(2)" : "U-Edinburgh-style");
5651  }
5652  }
5654  /*
5655  * Older CMU (including the weird "fnord" text) licenses.
5656  * Note that SPDX listed MIT-CMU license is detected earlier.
5657  */
5658  if (!lmem[_mCMU] && INFILE(_LT_CMU_1)) {
5659  if (!lmem[_mREDHAT] && INFILE(_CR_REDHAT)) {
5660  INTERESTING(lDebug ? "RH(5)" : "RedHat");
5661  lmem[_mREDHAT] = 1;
5662  }
5663  else if (INFILE(_CR_NRL)) {
5664  INTERESTING("NRL");
5665  }
5666  else if (!lmem[_mCMU] && mCR_CMU()) {
5667  INTERESTING(lDebug ? "CMU(5)" : "CMU");
5668  lmem[_mCMU] = 1;
5669  }
5670  else {
5671  INTERESTING("CMU-style");
5672  lmem[_mCMU] = 1;
5673  }
5674  }
5675  else if (!lmem[_mCMU] && INFILE(_LT_CMU_2) && mCR_CMU()) {
5676  INTERESTING(lDebug ? "CMU(6)" : "CMU");
5677  lmem[_mCMU] = 1;
5678  }
5679  else if (INFILE(_LT_CMU_3)) {
5680  INTERESTING(lDebug ? "CMU(7)" : "CMU");
5681  lmem[_mCMU] = 1;
5682  }
5683  else if (INFILE(_LT_CMU_4)) {
5684  INTERESTING(lDebug ? "CMU(8)" : "CMU");
5685  lmem[_mCMU] = 1;
5686  }
5687  else if (INFILE(_LT_CMU_5)) {
5688  INTERESTING(lDebug ? "CMU(9)" : "CMU");
5689  lmem[_mCMU] = 1;
5690  }
5691  else if (INFILE(_LT_CMU_6)) {
5692  INTERESTING(lDebug ? "CMU(10)" : "CMU");
5693  lmem[_mCMU] = 1;
5694  }
5696  /*
5697  * University of Chicago
5698  */
5699  if (INFILE(_CR_UCHICAGO) && INFILE(_LT_UCHICAGO)) {
5700  INTERESTING("U-Chicago");
5701  }
5703  /*
5704  * University of Utah
5705  */
5706  if (INFILE(_CR_UUTAH) && INFILE(_LT_UUTAH)) {
5707  INTERESTING("U-Utah");
5708  }
5710  /*
5711  * University of British Columbia
5712  */
5713  if (INFILE(_CR_UBC) && INFILE(_LT_UBC)) {
5714  INTERESTING("U-BC");
5715  }
5717  /*
5718  * ImageMagick Studios - DON'T RECALL THE TEXT FOR THIS LICENSE!
5719  */
5720  if (INFILE(_LT_IMAGEMAGICK)) {
5721  if (INFILE(_CR_IMAGEMAGICK)) {
5722  INTERESTING("ImageMagick");
5723  }
5724  else {
5725  INTERESTING("ImageMagick-style");
5726  }
5727  }
5728  else if (URL_INFILE(_URL_IMAGEMAGICK)) {
5729  INTERESTING(lDebug ? "ImageMagick(url)" : "ImageMagick");
5730  }
5732  /*
5733  * Riverbank
5734  */
5735  if (INFILE(_LT_RIVERBANK) && INFILE(_TITLE_RIVERBANK_EULA)) {
5736  INTERESTING("Riverbank-EULA");
5737  }
5739  /*
5740  * Polyserve
5741  */
5742  if (INFILE(_CR_POLYSERVE) && INFILE(_LT_POLYSERVE)) {
5743  INTERESTING("Polyserve-CONFIDENTIAL");
5744  }
5746  /*
5747  * Fujitsu Limited
5748  */
5749  if (INFILE(_CR_FUJITSU) && INFILE(_LT_FUJITSU)) {
5750  INTERESTING("Fujitsu");
5751  }
5753  /*
5754  * Cypress Semiconductor
5755  */
5756  if (INFILE(_CR_CYPRESS) && INFILE(_LT_CYPRESS)) {
5757  INTERESTING("Cypress-FW");
5758  }
5759  /*
5760  * Keyspan
5761  */
5762  else if (INFILE(_CR_KEYSPAN) && INFILE(_LT_KEYSPAN)) {
5763  INTERESTING("Keyspan-FW");
5764  }
5765  /*
5766  * ATMEL
5767  */
5768  else if (INFILE(_LT_ATMEL_LINUX_FW) && INFILE(_LT_ATMEL_LINUX_FW_2)) {
5769  INTERESTING("Atmel-linux-firmware");
5770  }
5771  else if (INFILE(_CR_ATMEL) && INFILE(_LT_ATMEL)) {
5772  INTERESTING("ATMEL-FW");
5773  }
5775  /*
5776  * Quest Software
5777  */
5778  if (INFILE(_LT_QUEST_EULA) && INFILE(_TITLE_QUEST_EULA)) {
5779  INTERESTING("Quest-EULA");
5780  }
5782  /*
5783  * International Organization for Standarization
5784  */
5785  if (INFILE(_LT_IOS) && INFILE(_CR_IOS)) {
5786  INTERESTING("IOS");
5787  }
5789  /*
5790  * Garmin Ltd.
5791  */
5792  if (INFILE(_LT_GARMIN_EULA) && INFILE(_TITLE_GARMIN_EULA)) {
5793  INTERESTING("Garmin-EULA");
5794  }
5796  /*
5797  * AVM GmbH
5798  */
5799  if (INFILE(_CR_AVM)) {
5800  if (INFILE(_LT_AVM_1)) {
5801  INTERESTING(lDebug ? "AVM(1)" : "AVM");
5802  }
5803  else if (INFILE(_LT_AVM_2)) {
5804  INTERESTING(lDebug ? "AVM(2)" : "AVM");
5805  }
5806  }
5807  else if (INFILE(_LT_AVM_3)) {
5808  INTERESTING(lDebug ? "AVM(3)" : "AVM");
5809  }
5811  /*
5812  * Fair license
5813  */
5814  if (INFILE(_LT_FAIR)) {
5815  if (INFILE(_TITLE_FAIR)) {
5816  INTERESTING("Fair");
5817  }
5818  else {
5819  INTERESTING("Fair-style");
5820  }
5821  }
5823  /*
5824  * GCA (Majordomo)
5825  */
5826  if (INFILE(_LT_GCA)) {
5827  if (INFILE(_TITLE_MAJORDOMO11)) {
5828  INTERESTING("Majordomo-1.1");
5829  }
5830  else {
5831  INTERESTING("Majordomo");
5832  }
5833  }
5835  /*
5836  * Zeus Technology -- this one is kind of a corner-case since the wording
5837  * is VERY general. If there's a Zeus copyright with the license text,
5838  * spell it out; else, look for the same text in the "generic" section.
5839  */
5840  if (INFILE(_CR_ZEUS) && INFILE(_LT_ZEUS)) {
5841  INTERESTING("Zeus");
5842  }
5844  /*
5845  * Information-technology promotion agency
5846  */
5847  if (!lmem[_mXOPEN] && INFILE(_LT_XOPEN_1)) {
5848  if (!lmem[_mOSF] && INFILE(_CR_OSF)) {
5849  INTERESTING(lDebug ? "OSF(2)" : "OSF");
5850  lmem[_mOSF] = 1;
5851  }
5852  else if (INFILE(_CR_UI)) {
5853  INTERESTING(lDebug ? "UI(2)" : "Unix-Intl");
5854  }
5855  else if (INFILE(_CR_XOPEN)) {
5856  INTERESTING(lDebug ? "XOpen(2)" : "X/Open");
5857  lmem[_mXOPEN] = 1;
5858  }
5859  else if (INFILE(_CR_IPA)) {
5860  INTERESTING("IPA");
5861  }
5862  else if (!lmem[_mSUN] && INFILE(_CR_SUN)) {
5863  INTERESTING(lDebug ? "Sun(10)" : "Sun");
5864  lmem[_mSUN] = 1;
5865  }
5866  else {
5867  INTERESTING("X/Open-style");
5868  }
5869  }
5870  /* This one is funky - it includes part of the copyright */
5871  else if (!lmem[_mXOPEN] && INFILE(_LT_XOPEN_2)) {
5872  INTERESTING(lDebug ? "XOpen(3)" : "X/Open");
5873  lmem[_mXOPEN] = 1;
5874  }
5876  /*
5877  * Interlink networks EULA (seen in HP proprietary code)
5878  */
5879  if (INFILE(_LT_INTERLINK_EULA) && INFILE(_TITLE_INTERLINK_EULA)) {
5880  INTERESTING("Interlink-EULA");
5881  }
5883  /*
5884  * Mellanox Technologies
5885  */
5886  if (INFILE(_LT_MELLANOX) && INFILE(_CR_MELLANOX)) {
5887  INTERESTING("Mellanox");
5888  }
5890  /*
5891  * nCipher Corp
5892  */
5893  if (INFILE(_LT_NCIPHER) && INFILE(_CR_NCIPHER)) {
5894  INTERESTING("nCipher");
5895  }
5897  /*
5898  * Distributed Processing Technology Corp
5899  */
5900  if (INFILE(_CR_DPTC) && INFILE(_LT_DPTC)) {
5901  INTERESTING("DPTC");
5902  }
5903  /*
5904  * Distributed Management Task Force
5905  */
5906  else if (HASTEXT(_TEXT_REPRODUCED, 0) && INFILE(_CR_DMTF) &&
5907  INFILE(_LT_DMTF)) {
5908  INTERESTING("DMTF");
5909  lmem[_fATTRIB] = 1;
5910  }
5912  /*
5913  * DSC Technologies Corp
5914  */
5915  if (INFILE(_CR_DSCT) && INFILE(_LT_DSCT)) {
5916  INTERESTING("DSCT");
5917  }
5919  /*
5920  * Epinions, Inc.
5921  */
5922  if (INFILE(_CR_EPINIONS) && INFILE(_LT_EPINIONS)) {
5923  INTERESTING("Epinions");
5924  }
5926  /*
5927  * MITEM, Ltd
5928  */
5929  if (INFILE(_CR_MITEM) && INFILE(_LT_MITEM)) {
5930  INTERESTING("MITEM");
5931  }
5933  /*
5934  * Cylink corp
5935  */
5936  if ((INFILE(_LT_CYLINK_ISC_1) || INFILE(_LT_CYLINK_ISC_2))) {
5937  INTERESTING("Cylink-ISC");
5938  }
5940  /*
5941  * SciTech software
5942  */
5943  if (INFILE(_CR_SCITECH) && INFILE(_LT_SCITECH)) {
5944  INTERESTING("SciTech");
5945  }
5947  /*
5948  * OReilly and Associates
5949  */
5950  if (INFILE(_LT_OREILLY_1)) {
5951  if (INFILE(_CR_OREILLY)) {
5952  INTERESTING("OReilly");
5953  }
5954  else {
5955  INTERESTING("OReilly-style");
5956  }
5957  }
5958  else if (INFILE(_LT_OREILLY_2)) {
5959  if (INFILE(_CR_OREILLY)) {
5960  INTERESTING(lDebug ? "OReilly-2" : "OReilly");
5961  }
5962  else {
5963  INTERESTING(lDebug ? "OReilly-st-2" : "OReilly-style");
5964  }
5965  }
5967  /*
5968  * Bit-Torrent
5969  */
5970  if (INFILE(_LT_BITTORRENT)) {
5971  if (INFILE(_TITLE_BITTORRENT11)) {
5972  INTERESTING("BitTorrent-1.1");
5973  }
5974  else if (INFILE(_TITLE_BITTORRENT10)) {
5975  INTERESTING("BitTorrent-1.0");
5976  }
5977  else {
5978  INTERESTING("BitTorrent");
5979  }
5980  }
5981  else if (INFILE(_LT_BITTORRENT_V11)) {
5982  INTERESTING("BitTorrent-1.1");
5983  }
5984  else if (INFILE(_LT_BITTORRENT_V10)) {
5985  INTERESTING("BitTorrent-1.0");
5986  }
5987  else if (INFILE(_LT_BITTORRENTref)) {
5988  INTERESTING(lDebug ? "BitTorrent(ref)" : "BitTorrent");
5989  }
5991  /*
5992  * Open Software Foundation
5993  */
5994  if (INFILE(_LT_OSF_1)) {
5995  if (INFILE(_CR_OSF)) {
5996  INTERESTING(lDebug ? "OSF(3)" : "OSF");
5997  lmem[_mOSF] = 1;
5998  }
5999  else {
6000  INTERESTING(lDebug ? "OSF-style(1)" : "OSF-style");
6001  }
6002  }
6003  else if (INFILE(_LT_OSF_2)) {
6004  if (INFILE(_CR_OSF)) {
6005  INTERESTING(lDebug ? "OSF(4)" : "OSF");
6006  lmem[_mOSF] = 1;
6007  }
6008  else if (INFILE(_LT_CMU_8)) {
6009  INTERESTING(lDebug ? "CMU(11)" : "CMU");
6010  }
6011  else {
6012  INTERESTING(lDebug ? "OSF-style(2)" : "OSF-style");
6013  }
6014  }
6016  /*
6017  * OpenLDAP (if not already determined above -- the OpenLDAP public license
6018  * borrows text from LOTS of different sources)
6019  */
6020  if (!lmem[_fBSD] && lmem[_tOPENLDAP] && !lmem[_fOPENLDAP]) {
6021  if (INFILE(_LT_OPENLDAP_1)) {
6022  if (!TRYGROUP(famOPENLDAP)) {
6023  INTERESTING("OLDAP-style");
6024  }
6025  }
6026  else if (INFILE(_LT_OPENLDAP_2)) {
6027  INTERESTING("OLDAP");
6028  }
6029  }
6031  /*
6032  * The Knuth license is sufficiently bizarre enough it belongs down here,
6033  * towards the end of the search
6034  *****
6035  * Lachman Associates - includes a proprietary-to-the-max paragraph
6036  * IoSoft Ltd.
6037  */
6038  if (INFILE(_CR_KNUTH) && INFILE(_LT_KNUTH_1)) {
6039  INTERESTING(lDebug ? "Knuth(1)" : "D.E.Knuth");
6040  }
6041  else if (INFILE(_LT_KNUTH_2)) {
6042  INTERESTING(lDebug ? "Knuth(2)" : "D.E.Knuth");
6043  }
6044  else if (INFILE(_LT_KNUTH_STYLE)) {
6045  INTERESTING("Knuth-style");
6046  }
6047  else if (INFILE(_LT_LACHMAN_SECRET)) {
6048  INTERESTING("Lachman-Proprietary");
6049  }
6050  else if (INFILE(_LT_IOSOFT_SRCONLY)) {
6051  INTERESTING("IoSoft.COMMERCIAL");
6052  }
6054  /*
6055  * The Free Software License
6056  */
6057  if (INFILE(_LT_FREE_SW)) {
6058  INTERESTING("Free-SW");
6059  }
6060  /*
6061  * NOT free software and explicitly free software
6062  */
6063  else if (INFILE(_PHR_NOT_FREE_SW)) {
6064  if (INFILE(_LT_NOT_FREE) && INFILE(_CR_WTI)) {
6065  INTERESTING("WTI.Not-free");
6066  }
6067  else {
6068  INTERESTING("Not-Free");
6069  }
6070  }
6072  /*
6073  * Code Project Open License
6074  */
6075  if (INFILE(_LT_CPOL)) {
6076  if (HASTEXT(_LT_CPOL_V102, REG_EXTENDED)) {
6077  INTERESTING("CPOL-1.02");
6078  } else {
6079  INTERESTING("CPOL");
6080  }
6081  }
6083  /*
6084  * Macrovision
6085  */
6086  if (INFILE(_LT_MACROV_IA) && INFILE(_PHR_MACROVISION)) {
6087  if (INFILE(_PHR_EULA)) {
6088  INTERESTING("Macrovision-EULA");
6089  }
6090  else {
6091  INTERESTING("Macrovision");
6092  }
6093  }
6095  /*
6096  * VMware
6097  */
6098  if (INFILE(_LT_VMWARE) && INFILE(_TITLE_VMWARE)) {
6099  INTERESTING("VMware-EULA");
6100  }
6102  /*
6103  * UCWARE.com
6104  */
6105  if (INFILE(_LT_UCWARE_EULA_1) || INFILE(_LT_UCWARE_EULA_2)) {
6106  INTERESTING("UCWare-EULA");
6107  }
6109  /*
6110  * InfoSeek Corp
6111  */
6112  if (INFILE(_LT_INFOSEEK) && INFILE(_CR_INFOSEEK)) {
6113  INTERESTING("InfoSeek");
6114  }
6116  /*
6117  * Trident Microsystems
6118  */
6119  if (INFILE(_LT_TRIDENT_EULA) && INFILE(_CR_TRIDENT)) {
6120  INTERESTING("Trident-EULA");
6121  }
6123  /*
6124  * ARJ Software Inc
6125  */
6126  if (INFILE(_LT_ARJ) && INFILE(_CR_ARJ)) {
6127  INTERESTING("ARJ");
6128  }
6130  /*
6131  * ArgoUML license (UC Regents, research-purposes clause)
6132  */
6133  if (INFILE(_LT_ARGOUML) || INFILE(_LT_ARGOUML_2)) {
6134  INTERESTING("ArgoUML");
6135  }
6137  /*
6138  * Piriform Ltd
6139  */
6140  if (INFILE(_LT_PIRIFORM) && INFILE(_CR_PIRIFORM)) {
6141  INTERESTING("Piriform");
6142  }
6144  /*
6145  * Design Science License (DSL)
6146  */
6147  if (INFILE(_LT_DSL)) {
6148  INTERESTING("DSL");
6149  }
6151  /*
6152  * Skype
6153  */
6154  if (INFILE(_TITLE_SKYPE) && INFILE(_LT_SKYPE)) {
6155  INTERESTING("Skype-EULA");
6156  }
6158  /*
6159  * Hauppauge
6160  */
6161  if (INFILE(_LT_HAUPPAUGE)) {
6162  INTERESTING("Hauppauge");
6163  }
6165  /*
6166  * Platform Computing Corp (or a generic on-your-intranet-only restriction)
6167  */
6168  if (INFILE(_LT_INTRANET_ONLY)) {
6169  if (INFILE(_CR_PLATFORM_COMP)) {
6170  INTERESTING(lDebug ? "Platfm(1)" : "Platform-Computing(RESTRICTED)");
6171  } else {
6172  MEDINTEREST("Intranet-only");
6173  }
6174  } else if (INFILE(_LT_NOT_INTERNET)) {
6175  if (INFILE(_CR_PLATFORM_COMP)) {
6176  INTERESTING(lDebug ? "Platfm(2)" : "Platform-Computing(RESTRICTED)");
6177  } else {
6178  MEDINTEREST("Not-Internet");
6179  }
6180  }
6182  /*
6183  * Curl
6184  */
6185  if (URL_INFILE(_URL_CURL)) {
6186  INTERESTING(lDebug ? "Curl(URL)" : "curl");
6187  }
6189  /*
6190  * ID Software
6191  */
6192  if (INFILE(_LT_ID_EULA)) {
6193  INTERESTING("ID-EULA");
6194  }
6196  /*
6197  * M+ Fonts Project
6198  */
6199  if (INFILE(_LT_MPLUS_FREE_FONT) && INFILE(_CR_MPLUS)) {
6200  INTERESTING("M-Plus-Project");
6201  }
6203  /*
6204  * Powder Development
6205  */
6206  if (INFILE(_LT_POWDER)) {
6207  INTERESTING("Powder-Proprietary");
6208  }
6210  /*
6211  * Against DRM
6212  */
6213  if (INFILE(_LT_AGAINST_DRM)) {
6214  INTERESTING("AgainstDRM");
6215  }
6217  /*
6218  * The TeXinfo exception clause
6219  */
6220  if (INFILE(_LT_TEX_EXCEPT)) {
6221  INTERESTING(lDebug ? "TeX-except" : "TeX-exception");
6222  }
6224  /*
6225  * The U.S. Gummint
6226  */
6227  if (INFILE(_LT_USGOVT_1)) {
6228  if (INFILE(_CR_URA)) {
6229  MEDINTEREST("URA.govt");
6230  }
6231  else {
6232  MEDINTEREST(lDebug ? "Govt-Wk(1)" : "Govt-work");
6233  }
6234  }
6235  else if (INFILE(_LT_USGOVT_2)) {
6236  /*
6237  * mpich2
6238  */
6239  if (INFILE(_LT_MPICH2)) {
6240  INTERESTING("mpich2");
6241  }
6242  else {
6243  MEDINTEREST(lDebug ? "Govt-Wk(2)" : "Govt-work");
6244  }
6245  }
6246  else if (INFILE(_LT_USGOVT_RIGHTS1) && INFILE(_LT_PUBLIC)) {
6247  MEDINTEREST(lDebug ? "US-Govt(1)" : "Govt-rights");
6248  }
6249  else if (INFILE(_LT_USGOVT_RIGHTS2)) {
6250  MEDINTEREST(lDebug ? "US-Govt(2)" : "Govt-rights");
6251  }
6253  /*
6254  * AACA (Ada Conformity Assessment Authority)
6255  */
6256  if (INFILE(_LT_ACAA_RIGHTS) && INFILE(_LT_PUBLIC)) {
6257  INTERESTING("ACAA");
6258  }
6260  /*
6261  * Zend Engine License
6262  */
6263  if (INFILE(_LT_ZEND_1) || URL_INFILE(_URL_ZEND)) {
6264  INTERESTING("Zend-2.0");
6265  }
6266  else if (INFILE(_LT_ZEND_2)) {
6267  INTERESTING("Zend-1.0");
6268  }
6270  /*
6271  * WebM
6272  * Changed to BSD-3-Clause, WebM is not OSI nor SPDX recognized license
6273  */
6274  if (URL_INFILE(_URL_WEBM)) {
6275  INTERESTING(lDebug ? "WebM" : "BSD-3-Clause");
6276  }
6278  /* Dyade Public License
6279  * http://old.koalateam.com/jackaroo/DYADE_PUBLIC_LICENSE.TXT
6280  */
6281  if (INFILE(_LT_DYADE) && INFILE(_LT_DYADE_2))
6282  {
6283  INTERESTING("Dyade");
6284  }
6285  /*
6286  * Zimbra
6287  */
6288  if (INFILE(_TITLE_ZIMBRA_13)) {
6289  INTERESTING("Zimbra-1.3");
6290  }
6291  else if (INFILE(_TITLE_ZIMBRA_12)) {
6292  INTERESTING("Zimbra-1.2");
6293  }
6294  else if (INFILE(_TITLE_ZIMBRA)) {
6295  INTERESTING("Zimbra");
6296  }
6298  /*
6299  * Open Database
6300  */
6301  if (INFILE(_TITLE_ODBL)) {
6302  INTERESTING("ODbL-1.0");
6303  lmem[_fODBL] = 1;
6304  }
6306  /*
6307  * Multics
6308  */
6309  if (INFILE(_LT_MULTICS)) {
6310  INTERESTING("Multics");
6311  }
6313  /*
6314  * H2
6315  * Note, H2 title is also checked in MPL section
6316  */
6317  if (INFILE(_TITLE_H2_V10)) {
6318  INTERESTING("H2-1.0");
6319  }
6321  /*
6322  * CRYPTOGAMS
6323  */
6324  if (INFILE(_LT_CRYPTOGAMS)) {
6325  INTERESTING("Cryptogams");
6326  }
6328  /*
6329  * Cygnus-eCos-1.0
6330  * Note, Cygnus-eCos title is also checked in MPL section
6331  */
6332  if (INFILE(_TITLE_CYGNUS_ECOS_V10)) {
6333  INTERESTING("Cygnus-eCos-1.0");
6334  }
6336  /*
6337  * RHeCos-1.1
6338  * Note, RHeCos-1.1 title is also checked in MPL section
6339  */
6340  if (INFILE(_TITLE_RHeCos_V11)) {
6341  INTERESTING("RHeCos-1.1");
6342  }
6344  /*
6345  * TMate
6346  * Note, TMate is also recognized with BSD-2-Clause detection
6347  */
6348  if (INFILE(_TITLE_TMATE)) {
6349  INTERESTING("TMate");
6350  }
6352  /*
6353  * Abstyles
6354  */
6355  if (INFILE(_LT_ABSTYLES_1) && INFILE(_LT_ABSTYLES_2)) {
6356  INTERESTING("Abstyles");
6357  }
6359  if (INFILE(_LT_ABRS)) {
6360  INTERESTING("ABRS");
6361  }
6363  if (INFILE(_LT_ANDRE_ADRIAN_DFS) || INFILE(_LT_ANDRE_ADRIAN_DFS_2)) {
6364  INTERESTING("Andre-Adrian-DFS");
6365  }
6367  if (INFILE(_LT_ACTIVESTATE) || INFILE(_TITLE_ACTIVESTATE)) {
6368  INTERESTING("ActiveState-Community");
6369  }
6371  /*
6372  * Amazon Digital Services License
6373  */
6374  if (INFILE(_LT_ADSL) && (INFILE(_CR_AMAZON) || HASTEXT(_TEXT_AMAZON_DIG, REG_ICASE))) {
6375  INTERESTING("ADSL");
6376  }
6378  /*
6379  * CrystalStacker License
6380  */
6381  if (HASTEXT(_LT_CRYSTALSTACKER, REG_EXTENDED)) {
6382  INTERESTING("CrystalStacker");
6383  }
6385  /*
6386  * 3GPP
6387  */
6388  if (INFILE(_LT_3GPP)) {
6389  INTERESTING("3GPP");
6390  }
6392  /*
6393  * ITU-T
6394  */
6395  if (INFILE(_LT_ITU_T_1) || INFILE(_LT_ITU_T_2) || HASTEXT(_TITLE_ITU_T, 0)) {
6396  INTERESTING("ITU-T");
6397  }
6399  /*
6400  * Sun Public License
6401  */
6402  if (!lmem[_mSUN] && !lmem[_mMPL]) {
6403  if (INFILE(_TITLE_SUN_PL10)) {
6404  INTERESTING("SPL-1.0");
6405  }
6406  else if (!lmem[_fREAL] && INFILE(_TITLE_SUN_PL)) {
6407  INTERESTING("SPL");
6408  }
6409  }
6411  /*
6412  * libtiff, note that license text is detected earlier
6413  */
6414  if (INFILE(_PHR_LIBTIFF)) {
6415  INTERESTING("libtiff");
6416  }
6418  /*
6419  * Imlib2
6420  */
6421  if (INFILE(_PHR_Imlib2)) {
6422  INTERESTING("Imlib2");
6423  }
6425  /*
6426  * Wide Open License (WOL)
6427  */
6428  if (INFILE(_TITLE_WOL) || INFILE(_URL_WOL)) {
6429  INTERESTING("WOL");
6430  }
6432  /*
6433  * naist-2003
6434  */
6435  if (INFILE(_LT_NAIST_2003) && HASTEXT(_TEXT_NAIST, 0)) {
6436  INTERESTING("naist-2003");
6437  }
6439  /*
6440  * EDL-1.0
6441  */
6442  if (INFILE(_TITLE_EDL_V10)) {
6443  INTERESTING("EDL-1.0");
6444  }
6446  /*
6447  * HSQLDB
6448  */
6449  if (INFILE(_LT_HSQLDB_1) || INFILE(_LT_HSQLDB_2) || INFILE(_LT_HSQLDB_3)) {
6450  INTERESTING("HSQLDB");
6451  }
6453  /*
6454  * Sony Computer Entertainment (SCEA) Shared Source License
6455  */
6456  if (INFILE(_TITLE_SCEA)) {
6457  INTERESTING("SCEA");
6458  }
6460  /*
6461  * OpenMap
6462  */
6463  if (INFILE(_TITLE_OPENMAP)) {
6464  INTERESTING("OpenMap");
6465  lmem[_fPDDL] = 1;
6466  }
6468  /*
6469  * ICU 1.8.1
6470  */
6471  if (INFILE(_LT_ICU_1) || INFILE(_TITLE_ICU) || INFILE(_SPDX_ICU)) {
6472  INTERESTING("ICU");
6473  }
6474  else if (INFILE(_PHR_ICU_1)) {
6475  INTERESTING("ICU");
6476  }
6478  /*
6479  * Ubuntu Font License
6480  */
6481  if (INFILE(_TITLE_UBUNTU_FONT)) {
6482  INTERESTING("ubuntu-font-1.0");
6483  lmem[_fPDDL] = 1;
6484  }
6486  /*
6487  * ODC Attribution License
6488  */
6489  if (INFILE(_LT_ODC)) {
6490  INTERESTING("ODC-By-1.0");
6491  pd = 0;
6492  }
6494  /*
6495  * Community Data License Agreement
6496  */
6497  if (INFILE(_TITLE_CDLA_Permissive_10)) {
6498  INTERESTING("CDLA-Permissive-1.0");
6499  }
6500  else if (INFILE(_TITLE_CDLA_Sharing_10)) {
6501  INTERESTING("CDLA-Sharing-1.0");
6502  }
6504  /*
6505  * Toolbar2000
6506  */
6507  if (INFILE(_TITLE_Toolbar2000) || INFILE(_URL_Toolbar2000)) {
6508  INTERESTING("Toolbar2000");
6509  }
6511  /*
6512  * unboundID-ldap-sdk
6513  */
6514  if (INFILE(_TITLE_unboundID_ldap_sdk) || INFILE(_LT_unboundID_ldap_sdk)) {
6515  INTERESTING("unboundID-ldap-sdk");
6516  }
6518  /*
6519  * BlueOak-1.0.0
6520  */
6521  if (INFILE(_TITLE_BlueOak_100) || URL_INFILE(_URL_BlueOak_100)) {
6522  INTERESTING("BlueOak-1.0.0");
6523  }
6524  else if (INFILE(_LT_BlueOak_100_Purpose) && INFILE(_LT_BlueOak_100_Acceptance)) {
6525  INTERESTING("BlueOak-1.0.0");
6526  }
6528  /*
6529  * CERN-OHL
6530  */
6531  if (INFILE(_TITLE_CERN_OHL_11)) {
6532  INTERESTING("CERN-OHL-1.1");
6533  }
6534  else if (INFILE(_TITLE_CERN_OHL_12)) {
6535  INTERESTING("CERN-OHL-1.2");
6536  }
6538  /*
6539  * MulanPSL
6540  */
6541  if (INFILE(_TITLE_MulanPSL_10) || URL_INFILE(_URL_MulanPSL) || INFILE(_LT_MulanPSL_10)) {
6542  INTERESTING("MulanPSL-1.0");
6543  }
6545  /*
6546  * SSH
6547  */
6548  if (INFILE(_LT_FREE_72) && HASTEXT(_LT_SSH, REG_EXTENDED)) {
6549  if (INFILE(_LT_SSH_OpenSSH)) {
6550  INTERESTING("SSH-OpenSSH");
6551  }
6552  else {
6553  INTERESTING("SSH-short");
6554  }
6555  }
6557 
6558  SPDXREF();
6560  EXCEPTIONS();
6562 
6563  /*
6564  * The Stallman paper "Why Software Should Be Free" is a red-herring.
6565  * His 1986 interview in Byte magazine also is, too.
6566  */
6567  if ((INFILE(_TITLE_RMS_WSSBF) && INFILE(_PHR_RMS1) &&
6568  INFILE(_PHR_RMS2)) || INFILE(_TITLE_RMS_BYTE86)) {
6569  if (lDiags) {
6570  printf("... RMS propaganda\n");
6571  }
6572  lmem[_fDOC] = 1;
6573  }
6575  /*
6576  * If there's a no-warranty statement in the file, remember the regex.
6577  * Ditto for phrase stating restrictions.
6578  */
6579  if (maxInterest != IL_HIGH) {
6580  for (i = 0; i < NNOWARRANTY; i++) {
6581  if (INFILE((j = _NO_WARRANTY_first+i))) {
6582  nw = j;
6583  break;
6584  }
6585  }
6586  }
6587  addLicence(cur.theMatches,"NoWarranty");
6588 
6589  /*
6590  * Statements about IP (Intellectual Property) rights
6591  */
6592  if (!lmem[_fIP] && INFILE(_LT_GEN_IP_1)) {
6593  INTERESTING(lDebug ? "IP(1)" : "IP-claim");
6594  }
6595  else if (!lmem[_fIP] && INFILE(_LT_GEN_IP_2) && NOT_INFILE(_TITLE_MIROS)) {
6596  INTERESTING(lDebug ? "IP(2)" : "IP-claim");
6597  }
6598  else if (!lmem[_fIP] && INFILE(_LT_GEN_IP_3)) {
6599  INTERESTING(lDebug ? "IP(3)" : "IP-claim");
6600  }
6602  /*
6603  * Dual licenses
6604  */
6605  if (INFILE(_LT_DUAL_LICENSE_0) && NOT_INFILE(_TITLE_NOSL)) {
6606  MEDINTEREST(lDebug ? "Dual-license(0)" : "Dual-license");
6607  }
6608  else if (INFILE(_LT_DUAL_LICENSE_22)) {
6609  MEDINTEREST(lDebug ? "Dual-license(22)" : "Dual-license");
6610  }
6611  else if (INFILE(_LT_DUAL_LICENSE_1) && NOT_INFILE(_TITLE_NOSL)) {
6612  MEDINTEREST(lDebug ? "Dual-license(1)" : "Dual-license");
6613  }
6614  else if (INFILE(_LT_DUAL_LICENSE_2)) {
6615  MEDINTEREST(lDebug ? "Dual-license(2)" : "Dual-license");
6616  }
6617  else if (INFILE(_LT_DUAL_LICENSE_3) && NOT_INFILE(_LT_DUAL_LICENSE_3_EXHIBIT)) {
6618  MEDINTEREST(lDebug ? "Dual-license(3)" : "Dual-license");
6619  }
6620  else if (INFILE(_LT_DUAL_LICENSE_4)) {
6621  MEDINTEREST(lDebug ? "Dual-license(4)" : "Dual-license");
6622  }
6623  else if (INFILE(_LT_DUAL_LICENSE_5)) {
6624  MEDINTEREST(lDebug ? "Dual-license(5)" : "Dual-license");
6625  }
6626  else if (INFILE(_LT_DUAL_LICENSE_6)) {
6627  MEDINTEREST(lDebug ? "Dual-license(6)" : "Dual-license");
6628  }
6629  else if (INFILE(_LT_DUAL_LICENSE_7)) {
6630  MEDINTEREST(lDebug ? "Dual-license(7)" : "Dual-license");
6631  }
6632  else if (INFILE(_LT_DUAL_LICENSE_8)) {
6633  MEDINTEREST(lDebug ? "Dual-license(8)" : "Dual-license");
6634  }
6635  else if (INFILE(_LT_DUAL_LICENSE_9)) {
6636  MEDINTEREST(lDebug ? "Dual-license(9)" : "Dual-license");
6637  }
6638  else if (INFILE(_LT_DUAL_LICENSE_10)) {
6639  MEDINTEREST(lDebug ? "Dual-license(10)" : "Dual-license");
6640  }
6641  else if (INFILE(_LT_DUAL_LICENSE_11)) {
6642  MEDINTEREST(lDebug ? "Dual-license(11)" : "Dual-license");
6643  }
6644  else if (INFILE(_LT_DUAL_LICENSE_12)) {
6645  MEDINTEREST(lDebug ? "Dual-license(12)" : "Dual-license");
6646  }
6647  else if (INFILE(_LT_DUAL_LICENSE_13)) {
6648  INTERESTING(lDebug ? "Dual-license(13)" : "Dual-license");
6649  INTERESTING("BSD");
6650  INTERESTING("MIT");
6651  /*
6652  * A special case for NomosTestfiles/Dual-license/respond.js
6653  * that has two dual-license statements.
6654  */
6655  if (!lmem[_mGPL]) {
6656  if (INFILE(_LT_DUAL_LICENSE_16)) {
6657  INTERESTING(lDebug ? "GPLV2(Dual-license(16))" : "GPL-2.0-only");
6658  }
6659  }
6660  }
6661  else if (INFILE(_LT_DUAL_LICENSE_14)) {
6662  INTERESTING(lDebug ? "Dual-license(14)" : "Dual-license");
6663  INTERESTING("BSD");
6664  if (!lmem[_mGPL]) {
6665  INTERESTING("GPL");
6666  }
6667  }
6668  else if (INFILE(_LT_DUAL_LICENSE_15)) {
6669  MEDINTEREST(lDebug ? "Dual-license(15)" : "Dual-license");
6670  }
6671  else if (INFILE(_LT_DUAL_LICENSE_16)) {
6672  INTERESTING(lDebug ? "Dual-license(16)" : "Dual-license");
6673  INTERESTING("MIT");
6674  INTERESTING(lDebug ? "GPLV2(Dual-license(16))" : "GPL-2.0-only");
6675  }
6676  else if (INFILE(_LT_DUAL_LICENSE_17)) {
6677  MEDINTEREST(lDebug ? "Dual-license(17)" : "Dual-license");
6678  }
6679  else if (INFILE(_LT_DUAL_LICENSE_18)) {
6680  MEDINTEREST(lDebug ? "Dual-license(18)" : "Dual-license");
6681  }
6682  else if (INFILE(_LT_DUAL_LICENSE_19)) {
6683  MEDINTEREST(lDebug ? "Dual-license(19)" : "Dual-license");
6684  }
6685  else if (INFILE(_LT_DUAL_LICENSE_20)) {
6686  MEDINTEREST(lDebug ? "Dual-license(20)" : "Dual-license");
6687  }
6688  else if (INFILE(_LT_DUAL_LICENSE_21)) {
6689  MEDINTEREST(lDebug ? "Dual-license(21)" : "Dual-license");
6690  }
6691  else if (INFILE(_LT_DUAL_LICENSE_23)) {
6692  MEDINTEREST(lDebug ? "Dual-license(23)" : "Dual-license");
6693  }
6694  else if (INFILE(_LT_DUAL_LICENSE_24)) {
6695  MEDINTEREST(lDebug ? "Dual-license(24)" : "Dual-license");
6696  }
6697  else if (INFILE(_LT_DUAL_LICENSE_25)) {
6698  MEDINTEREST(lDebug ? "Dual-license(25)" : "Dual-license");
6699  }
6700  else if (INFILE(_LT_DUAL_LICENSE_26)) {
6701  MEDINTEREST(lDebug ? "Dual-license(26)" : "Dual-license");
6702  }
6703  else if (INFILE(_LT_DUAL_LICENSE_27)) {
6704  MEDINTEREST(lDebug ? "Dual-license(27)" : "Dual-license");
6705  }
6706  else if (INFILE(_LT_DUAL_LICENSE_28)) {
6707  MEDINTEREST(lDebug ? "Dual-license(28)" : "Dual-license");
6708  }
6709  else if (INFILE(_LT_DUAL_LICENSE_29) && NOT_INFILE(_LT_MPL_SECONDARY_LICENSE)) {
6710  MEDINTEREST(lDebug ? "Dual-license(29)" : "Dual-license");
6711  }
6712  else if (INFILE(_LT_DUAL_LICENSE_30)) {
6713  MEDINTEREST(lDebug ? "Dual-license(30)" : "Dual-license");
6714  }
6715  else if (INFILE(_LT_DUAL_LICENSE_31)) {
6716  MEDINTEREST(lDebug ? "Dual-license(31)" : "Dual-license");
6717  }
6718  else if (INFILE(_LT_DUAL_LICENSE_32)) {
6719  MEDINTEREST(lDebug ? "Dual-license(32)" : "Dual-license");
6720  }
6721  else if (INFILE(_LT_DUAL_LICENSE_33)) {
6722  MEDINTEREST(lDebug ? "Dual-license(33)" : "Dual-license");
6723  }
6724  else if (INFILE(_LT_DUAL_LICENSE_34)) {
6725  MEDINTEREST(lDebug ? "Dual-license(34)" : "Dual-license");
6726  }
6727  else if (HASTEXT(_LT_DUAL_LICENSE_35, 0)) {
6728  MEDINTEREST(lDebug ? "Dual-license(35)" : "Dual-license");
6729  /*
6730  * GPL is not detected correctly in this case, therefore it is set here.
6731  */
6732  INTERESTING("GPL");
6733  }
6734  else if (INFILE(_LT_DUAL_LICENSE_36)) {
6735  MEDINTEREST(lDebug ? "Dual-license(36)" : "Dual-license");
6736  }
6737  else if (INFILE(_LT_DUAL_LICENSE_37)) {
6738  MEDINTEREST(lDebug ? "Dual-license(37)" : "Dual-license");
6739  }
6740  else if (INFILE(_LT_DUAL_LICENSE_38)) {
6741  MEDINTEREST(lDebug ? "Dual-license(38)" : "Dual-license");
6742  }
6743  else if (INFILE(_LT_DUAL_LICENSE_39)) {
6744  MEDINTEREST(lDebug ? "Dual-license(39)" : "Dual-license");
6745  }
6746  else if (INFILE(_LT_DUAL_LICENSE_40)) {
6747  MEDINTEREST(lDebug ? "Dual-license(40)" : "Dual-license");
6748  }
6749  else if (INFILE(_LT_DUAL_LICENSE_41)) {
6750  MEDINTEREST(lDebug ? "Dual-license(41)" : "Dual-license");
6751  }
6752  else if (INFILE(_LT_DUAL_LICENSE_42)) {
6753  MEDINTEREST(lDebug ? "Dual-license(42)" : "Dual-license");
6754  }
6755  else if (INFILE(_LT_DUAL_LICENSE_43)) {
6756  MEDINTEREST(lDebug ? "Dual-license(43)" : "Dual-license");
6757  }
6758  else if (HASTEXT(_LT_DUAL_LICENSE_44, 0)) {
6759  MEDINTEREST(lDebug ? "Dual-license(44)" : "Dual-license");
6760  }
6761  else if (INFILE(_LT_DUAL_LICENSE_45)) {
6762  MEDINTEREST(lDebug ? "Dual-license(45)" : "Dual-license");
6763  INTERESTING("MIT");
6764  }
6765  else if (HASTEXT(_LT_DUAL_LICENSE_46, REG_EXTENDED)) {
6766  MEDINTEREST(lDebug ? "Dual-license(46)" : "Dual-license");
6767  }
6768  else if (HASTEXT(_LT_DUAL_LICENSE_47, REG_EXTENDED) && NOT_INFILE(_LT_MPL_SECONDARY_LICENSE)) {
6769  MEDINTEREST(lDebug ? "Dual-license(47)" : "Dual-license");
6770  }
6771  else if (INFILE(_LT_DUAL_LICENSE_48)) {
6772  MEDINTEREST(lDebug ? "Dual-license(48)" : "Dual-license");
6773  }
6774  else if (HASTEXT(_LT_DUAL_LICENSE_49, REG_EXTENDED)) {
6775  MEDINTEREST(lDebug ? "Dual-license(49)" : "Dual-license");
6776  }
6778  /*
6779  * The Beer-ware license(!)
6780  */
6781  if (INFILE(_LT_BEERWARE)) {
6782  INTERESTING("Beerware");
6783  }
6785  /*
6786  * CMake license
6787  */
6788  if (URL_INFILE(_URL_CMAKE)) {
6789  INTERESTING("CMake");
6790  }
6792  /*
6793  * unRAR restriction
6794  */
6795  if (INFILE(_LT_UNRARref1) || INFILE(_LT_UNRARref2)) {
6796  INTERESTING("unRAR restriction");
6797  }
6799  /*
6800  * ANTLR Software Rights Notice
6801  */
6802  if (INFILE(_LT_ANTLR)) {
6803  INTERESTING("ANTLR-PD");
6804  lmem[_fANTLR] = 1;
6805  }
6807  /*
6808  * Creative Commons Zero v1.0 Universal
6809  */
6810  if (INFILE(_SPDX_CC0_10)) {
6811  INTERESTING("CC0-1.0");
6812  }
6813  else if (INFILE(_TITLE_CC0_10_1) || INFILE(_PHR_CC0_1) || INFILE(_PHR_CC0_2)) {
6814  INTERESTING("CC0-1.0");
6815  }
6816  else if (INFILE(_SPDX_CC0)) {
6817  INTERESTING("CC0");
6818  }
6820  /*
6821  * PA Font License (IPA)
6822  */
6823  if (INFILE(_TITLE_IPA)) {
6824  INTERESTING("IPA");
6825  }
6827  /*
6828  * European Union Public Licence
6829  */
6830  if (INFILE(_PHR_EUPL_10) || INFILE(_TITLE_EUPL_10)) {
6831  INTERESTING("EUPL-1.0");
6832  }
6833  else if (INFILE(_PHR_EUPL_11) || INFILE(_TITLE_EUPL_11)) {
6834  INTERESTING("EUPL-1.1");
6835  }
6836  else if (INFILE(_TITLE_EUPL_12)) {
6837  INTERESTING("EUPL-1.2");
6838  }
6839  else if (INFILE(_PHR_EUPL)) {
6840  INTERESTING("EUPL");
6841  }
6843  /* University of Illinois/NCSA Open Source License */
6844  if (!lmem[_fNCSA] && INFILE(_TITLE_NCSA) && NOT_INFILE(_TITLE_NCSA_EXHIBIT)) {
6845  INTERESTING(lDebug ? "NCSA(2)" : "NCSA");
6846  /* OZPLB-1.1 refers both to NCSA and OZPLB-1.1 licenses */
6847  if (INFILE(_TITLE_OZPLB_11)) {
6848  INTERESTING("OZPLB-1.1");
6849  }
6850  lmem[_fBSD] = 1;
6851  lmem[_mMIT] = 1;
6852  }
6854  /* ODC Public Domain Dedication & License 1.0 */
6855  if (INFILE(_TITLE_PDDL)) {
6856  INTERESTING("PDDL-1.0");
6857  lmem[_fPDDL] = 1;
6858  }
6860  /* PostgreSQL License */
6861  if (INFILE(_TITLE_POSTGRES) || INFILE(_TITLE_POSTGRES_1)) {
6862  INTERESTING("PostgreSQL");
6863  lmem[_fBSD] = 1;
6864  }
6866  /* Sax Public Domain Notice */
6867  if (INFILE(_LT_SAX_PD)) {
6868  INTERESTING("SAX-PD");
6869  lmem[_fSAX] = 1;
6870  }
6872  /*
6873  * WTF Public "license"
6874  */
6875  if (INFILE(_LT_WTFPL)) {
6876  INTERESTING("WTFPL");
6877  }
6878  else if (INFILE(_LT_WTFPLref)) {
6879  INTERESTING(lDebug ? "WTFPL(ref)" : "WTFPL");
6880  }
6881  else if (INFILE(_LT_WTFPLref_1)) {
6882  INTERESTING(lDebug ? "WTFPL(ref#1)" : "WTFPL");
6883  }
6884  else if (INFILE(_PHR_WTFPL)) {
6885  INTERESTING(lDebug ? "WTFPL(phr)" : "WTFPL");
6886  }
6888  /* Independent JPEG Group License */
6889  if (!lmem[_fIJG]) {
6890  if (HASTEXT(_PHR_IJG_1, REG_EXTENDED)) {
6891  INTERESTING("IJG");
6892  }
6893  else if (HASTEXT(_PHR_IJG_2, 0)) {
6894  INTERESTING("IJG");
6895  }
6896  else if (HASTEXT(_TITLE_IJG_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_2, 0)) {
6897  INTERESTING("IJG");
6898  }
6899  /* Independent JPEG Group can be referenced without IJG license*/
6900  else if (HASTEXT(_TITLE_IJG_2, 0) && !HASTEXT(_PHR_IJG_INTERFACE_1, 0) && !HASTEXT(_PHR_IJG_INTERFACE_2, 0)) {
6901  INTERESTING("IJG-possibility");
6902  }
6904  }
6905  /* Netizen Open Source License */
6906  if (!lmem[_mMPL] && INFILE(_TITLE_NOSL)) {
6907  INTERESTING(lDebug ? "NOSL(#2)" : "NOSL");
6908  }
6910  /* Net Boolean Public License v1 */
6911  if (INFILE(_TITLE_NBPL_V10)) {
6912  INTERESTING("NBPL-1.0");
6913  }
6915  /* Flora License */
6916  if (INFILE(_TITLE_Flora_V10)) {
6917  INTERESTING("Flora-1.0");
6918  }
6919  else if (INFILE(_TITLE_Flora_V11)) {
6920  INTERESTING("Flora-1.1");
6921  }
6922  else if (URL_INFILE(_URL_Flora)) {
6923  INTERESTING("Flora");
6924  }
6926  /* Standard ML of New Jersey License */
6927  if (INFILE(_TITLE_SMLNJ)) {
6928  INTERESTING("SMLNJ");
6929  }
6931  /* Mozilla Public License possibility */
6932  if (!lmem[_mMPL]) {
6933  if (INFILE(_TEXT_MPLV2) && INFILE(_URL_MPL20)) {
6934  INTERESTING("MPL-2.0");
6935  lmem[_mMPL] = 1;
6936  }
6937  else if (INFILE(_TEXT_MPL20_UNDER)) {
6938  INTERESTING("MPL-2.0");
6939  lmem[_mMPL] = 1;
6940  }
6941  else if (URL_INFILE(_URL_MPL_LATEST)) {
6942  INTERESTING(lDebug ? "MPL(latest)" : "MPL");
6943  lmem[_mMPL] = 1;
6944  }
6945  }
6947  /* Citrix License */
6948  if (INFILE(_TITLE_CITRIX)) {
6949  INTERESTING("Citrix");
6950  lmem[_fCITRIX] = 1;
6951  }
6953  /* CUA office public license */
6954  if (INFILE(_TITLE_CUA10)) {
6955  INTERESTING("CUA-OPL-1.0");
6956  }
6958  /* the Erlang Public License */
6959  if (INFILE(_TITLE_ERLPL_ref)) {
6960  INTERESTING("ErlPL-1.1");
6961  }
6963  /* German Free Software License */
6964  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))
6965  {
6966  INTERESTING("D-FSL-1.0");
6967  lmem[_mGPL] = 1;
6968  }
6970  /* CCLRC License */
6971  if (INFILE(_TITLE_CCLRC)) {
6972  INTERESTING("CCLRC");
6973  }
6975 
6976  /* Some GPL cases are still missing */
6977  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)))
6978  {
6979  INTERESTING(lDebug ? "GPL_V2_ref" : "GPL-2.0-only");
6980  lmem[_mGPL] = 1;
6981  }
6982  else if (!lmem[_mGPL] && INFILE(_LT_GPL_V3_ref))
6983  {
6984  INTERESTING(lDebug ? "GPL_V3_ref" : "GPL-3.0-only");
6985  lmem[_mGPL] = 1;
6986  }
6987  else if (!lmem[_mGPL] && INFILE(_LT_GPLref22))
6988  {
6989  INTERESTING(lDebug ? "GPLref22" : "GPL");
6990  lmem[_mGPL] = 1;
6991  }
6992  else if (!lmem[_mGPL] && NOT_INFILE(_LT_IGNORE_CLAUSE_2) && INFILE(_LT_GPLref21))
6993  {
6994  INTERESTING(lDebug ? "GPLref21" : "GPL");
6995  lmem[_mGPL] = 1;
6996  }
6997  /*
6998  * SPDX-License-Identifier lines may use a tab separator (e.g. ":\tGPL-2.0"),
6999  * which prevents _LT_GPL_NAMED3 from firing (it requires printable ASCII before
7000  * <gpl>). Check SPDX GPL identifiers directly here so they are not missed.
7001  */
7002  if (!lmem[_mGPL] && HASTEXT(_SPDX_GPL_20_or_later, REG_EXTENDED)
7003  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
7004  INTERESTING(lDebug ? "GPL-2.0-or-later(SPDX-direct)" : "GPL-2.0-or-later");
7005  lmem[_mGPL] = 1;
7006  }
7007  else if (!lmem[_mGPL] && HASTEXT(_SPDX_GPL_20, REG_EXTENDED)) {
7008  INTERESTING(lDebug ? "GPL-2.0-only(SPDX-direct)" : "GPL-2.0-only");
7009  lmem[_mGPL] = 1;
7010  }
7012 
7013  /* MX4J License version 1.0 */
7014  if (INFILE(_LT_MX4J_V10))
7015  {
7016  INTERESTING("MX4J-1.0");
7017  }
7018  else if (INFILE(_LT_MX4J))
7019  {
7020  INTERESTING("MX4J");
7021  }
7023  /* postfix license */
7024  if (INFILE(_TITLE_POSTFIX))
7025  {
7026  INTERESTING("Postfix");
7027  }
7029  /* not public domain */
7030  if (HASTEXT(_LT_PUBDOM_NOTclaim, REG_EXTENDED)) {
7031  if (INFILE(_LT_PUBDOM_CC)) {
7032  INTERESTING(lDebug ? "Pubdom(CC)" : "CC-PDDC");
7033  pd = 1;
7034  }
7035  else {
7036  INTERESTING(LS_NOT_PD);
7037  pd = 0;
7038  }
7039  }
7041  /* LIBGCJ license */
7042  if (INFILE(_LT_LIBGCJ))
7043  {
7044  INTERESTING("LIBGCJ");
7045  }
7047  /* open cascade technology public license */
7048  if (INFILE(_TITLE_OPEN_CASCADE))
7049  {
7050  INTERESTING("OpenCASCADE-PL");
7051  }
7053  /* KnowledgeTree Public License */
7054  if (INFILE(_LT_KnowledgeTree_V11))
7055  {
7056  INTERESTING("KnowledgeTree-1.1");
7057  }
7059  /* Interbase Public License */
7060  if (INFILE(_LT_Interbase_V10))
7061  {
7062  INTERESTING("Interbase-1.0");
7063  }
7065  /* ClearSilver license */
7066  if (INFILE(_LT_ClearSilver))
7067  {
7068  INTERESTING("ClearSilver");
7069  }
7071  /* ACE, TAO, CIAO */
7072  if(INFILE(_LT_ACE)) {
7073  INTERESTING("ACE");
7074  }
7075  else if(INFILE(_LT_FACE)) {
7076  INTERESTING("FaCE");
7077  }
7079  /* JISP */
7080  if(INFILE(_LT_JISP)) {
7081  INTERESTING("JISP");
7082  }
7084  /* Qmail */
7085  if(INFILE(_LT_QMAIL)) {
7086  INTERESTING("Qmail");
7087  }
7089  /* Migemo */
7090  if(INFILE(_LT_MIGEMO)) {
7091  INTERESTING("Migemo");
7092  }
7094  /* Sendmail */
7095  if(INFILE(_LT_Sendmail_title) ) {
7096  INTERESTING("Sendmail");
7097  }
7099  /* Giftware */
7100  if(INFILE(_LT_GIFTWARE)) {
7101  INTERESTING("Giftware");
7102  }
7104  /* Logica opensource */
7105  if(INFILE(_LT_LOGICA)) {
7106  INTERESTING("Logica-OSL-1.0");
7107  }
7109  /* Unidex */
7110  if(INFILE(_LT_UNIDEX)) {
7111  INTERESTING("Unidex");
7112  }
7114  /* TCL License */
7115  if (!lmem[_fTCL]) {
7116  if (INFILE(_TITLE_TCL)) {
7117  INTERESTING("TCL");
7118  }
7119  else if (INFILE(_SPDX_TCL)) {
7120  INTERESTING("TCL");
7121  }
7122  else if (INFILE(_LT_TCL)) {
7123  INTERESTING("TCL");
7124  }
7125  }
7127  /* AndroidSDK-Commercial license */
7128  if (INFILE(_LT_GOOGLE_SDK)) {
7129  INTERESTING("AndroidSDK.Commercial");
7130  }
7132  /* Qhull license */
7133  if (INFILE(_PHR_Qhull)) {
7134  INTERESTING("Qhull");
7135  }
7137  /* OZPLB-1.0 license */
7138  if (INFILE(_PHR_OZPLB_10)) {
7139  INTERESTING("OZPLB-1.0");
7140  }
7142  /* Texas Instruments license */
7143  if (INFILE(_LT_TI_BASE)) {
7144  if (INFILE(_LT_TI_TSPA)) {
7145  INTERESTING("TI-TSPA");
7146  } else if (INFILE(_LT_TI_TFL)) {
7147  INTERESTING("TI-TFL");
7148  }
7149  }
7151 
7152  /*
7153  * Some licenses say "licensed under the same terms as FOO".
7154  */
7155  gl.flags |= FL_SAVEBASE; /* save match buffer (if any) */
7156  if (*licStr == NULL_CHAR) {
7157  i = 0;
7158  if (INFILE(_LT_SAME_LICENSE_1)) {
7159  INTERESTING(lDebug ? "Same-lic-1" : "Same-license-as");
7160  i = 1;
7161  } else if (INFILE(_LT_SAME_LICENSE_2)) {
7162  INTERESTING(lDebug ? "Same-lic-2" : "Same-license-as");
7163  i = 2;
7164  }
7165  if (i) {
7166  if (cur.licPara == NULL_STR) {
7167  saveLicenseParagraph(cur.matchBase, isML, isPS, NO);
7168  }
7169  }
7170  }
7172  gl.flags |= ~FL_SAVEBASE; /* turn off, regardless */
7173  /*
7174  * ... and, there are several generic claims that "you are free to use this
7175  * software".
7176  * We call these claims "Freeware", because you can use the software free of charge,
7177  * but some other copyright holder exclusive rights are not granted in some cases.
7178  */
7179  if (*licStr == NULL_CHAR || pd >= 0) {
7180  for (i = 0; i < NFREECLAIM; i++) {
7181  if (CANSKIP(i, _KW_permission, _FREE_first_perm,
7182  _FREE_last_perm)) {
7183  i = _FREE_last_perm;
7184  continue;
7185  }
7186  if (CANSKIP(i, _KW_distribut, _FREE_first_dist,
7187  _FREE_last_dist)) {
7188  i = _FREE_last_dist;
7189  continue;
7190  }
7191  if (INFILE(_FREECLAIM_first+i)) {
7192  (void) strcpy(name, "Freeware");
7193  if (lDebug) {
7194  (void) sprintf(name+8, "(%d)", i+1);
7195  }
7196  INTERESTING(name);
7197  break;
7198  }
7199  }
7200  }
7202  /* Check for Public Domain */
7203  if (!lmem[_fANTLR] && !lmem[_fCLA] && !lmem[_mPYTHON] && !lmem[_mGFDL] &&
7204  !lmem[_fODBL] && !lmem[_fPDDL] && !lmem[_fRUBY] && !lmem[_fSAX] && !lmem[_fAPL] && !lmem[_mAPACHE] && !lmem[_mAPACHE10] && !lmem[_mAPACHE11] &&
7205  !lmem[_fARTISTIC] && !lmem[_fCITRIX] && !lmem[_mLGPL] && !lmem[_fBSD]&& NOT_INFILE(_TITLE_D_FSL_10)
7206  && !INFILE(_LT_CPOL)) {
7207  pd = checkPublicDomain(filetext, size, score, kwbm, isML, isPS);
7208  }
7210  /*
7211  * Some licenses point you to files/URLs...
7212  */
7213  if (*licStr == NULL_CHAR) {
7214  checkFileReferences(filetext, size, score, kwbm, isML, isPS);
7215  }
7217  /*
7218  * And, If no other licenses are present but there's a reference to
7219  * something being non-commercial, better note it now.
7220  */
7221 #if 0
7222  if (*licStr == NULL_CHAR && !HASKW(kwbm, _KW_public_domain))
7223 #endif
7224  if (maxInterest != IL_HIGH && !HASKW(kwbm, _KW_public_domain) &&
7225  NOT_INFILE(_PHR_COMMERC_NONCOMM)) {
7226  if (INFILE(_LT_NONCOMMERCIAL_1)) {
7227  INTERESTING(lDebug ? "NonC(1)" : "Non-commercial");
7228  }
7229  else if (INFILE(_LT_ZZNON_COMMERC1)) {
7230  INTERESTING(lDebug ? "NonC(2)" : "Non-commercial");
7231  }
7232  else if (INFILE(_LT_ZZNON_COMMERC2)) {
7233  INTERESTING(lDebug ? "NonC(3)" : "Non-commercial");
7234  }
7235  else if (HASTEXT(_TEXT_COMMERC, 0) &&
7236  INFILE(_PHR_NONCOMMERCIAL)) {
7237  INTERESTING(lDebug ? "NonC(4)" : "Non-commercial");
7238  }
7239  }
7240  if (INFILE(_LT_NOT_OPENSOURCE)) {
7241  INTERESTING("Not-OpenSource");
7242  }
7243  listClear(&whereList, NO); /* again, clear "unused" matches */
7245  /*
7246  * Look for footprints that declare something as proprietary... if we such
7247  * a statement, we care about the Copyright owner, too.
7248  */
7249  if (maxInterest != IL_HIGH) { /* if (*licStr == NULL_CHAR) { */
7250  j = 0; /* just a flag */
7251  if (INFILE(_LT_GEN_PROPRIETARY_1)) {
7252  INTERESTING(lDebug ? "Prop(1)" : "COMMERCIAL");
7253  j++;
7254  }
7255  else if (INFILE(_LT_GEN_PROPRIETARY_2)) {
7256  INTERESTING(lDebug ? "Prop(2)" : "COMMERCIAL");
7257  j++;
7258  }
7259  else if (INFILE(_LT_GEN_PROPRIETARY_3)) {
7260  INTERESTING(lDebug ? "Prop(3)" : "COMMERCIAL");
7261  j++;
7262  }
7263  else if (INFILE(_LT_GEN_PROPRIETARY_4)) {
7264  INTERESTING(lDebug ? "Prop(4)" : "COMMERCIAL");
7265  j++;
7266  }
7267  else if (INFILE(_LT_GEN_PROPRIETARY_5)) {
7268  INTERESTING(lDebug ? "Prop(5)" : "COMMERCIAL");
7269  j++;
7270  }
7271  else if (INFILE(_LT_GEN_PROPRIETARY_6)) {
7272  INTERESTING(lDebug ? "Prop(6)" : "COMMERCIAL");
7273  j++;
7274  }
7275  else if (INFILE(_LT_GEN_PROPRIETARY_7)) {
7276  INTERESTING(lDebug ? "Prop(7)" : "COMMERCIAL");
7277  j++;
7278  }
7279  else if (INFILE(_LT_GEN_PROPRIETARY_8)) {
7280  INTERESTING(lDebug ? "Prop(8)" : "COMMERCIAL");
7281  j++;
7282  }
7283  if (j) {
7284  checkCornerCases(filetext, size, score, kwbm, isML,
7285  isPS, nw, YES);
7286  }
7287  }
7288  listClear(&whereList, NO); /* again, clear "unused" matches */
7290  /*
7291  * Haskell Language Report License
7292  */
7293  if (INFILE(_LT_HASKELL_REPORT)) {
7294  INTERESTING("HaskellReport");
7295  }
7297  /*
7298  * Scheme Language Report License
7299  */
7300  if (INFILE(_LT_SCHEME_REPORT)) {
7301  INTERESTING("SchemeReport");
7302  }
7304  /*
7305  * German Data Licences (DL-DE family)
7306  */
7307  if (INFILE(_LT_DL_DE_ZERO_2)) {
7308  INTERESTING("DL-DE-ZERO-2.0");
7309  }
7310  else if (INFILE(_LT_DL_DE_BY_2_EN) || INFILE(_LT_DL_DE_BY_2_DE)) {
7311  INTERESTING("DL-DE-BY-2.0");
7312  }
7313  else if (INFILE(_LT_DL_DE_BY_1_EN) || INFILE(_LT_DL_DE_BY_1_DE)) {
7314  INTERESTING("DL-DE-BY-1.0");
7315  }
7317  /*
7318  * Norwegian Licence for Open Government Data (NLOD)
7319  */
7320  if (INFILE(_LT_NLOD_20_TEXT)) {
7321  INTERESTING("NLOD-2.0");
7322  }
7323  else if (INFILE(_LT_NLOD_10_TEXT)) {
7324  INTERESTING("NLOD-1.0");
7325  }
7327  /*
7328  * Statistics Canada Open License (SCOLA - French)
7329  */
7330  if (INFILE(_LT_SCOLA_FR)) {
7331  INTERESTING("OGL-Canada-SCOL");
7332  }
7334  /*
7335  * Canadian Open Government Licences
7336  */
7337  if (INFILE(_LT_OGL_TORONTO)) {
7338  INTERESTING("OGL-Toronto-1.0");
7339  }
7340  else if (INFILE(_LT_OGL_ONTARIO)) {
7341  INTERESTING("OGL-Ontario-1.0");
7342  }
7343  else if (INFILE(_LT_OGL_NOVA_SCOTIA)) {
7344  INTERESTING("OGL-Nova-Scotia-1.0");
7345  }
7346  else if (INFILE(_LT_OGL_BC)) {
7347  INTERESTING("OGL-British-Columbia-2.0");
7348  }
7349  else if (INFILE(_LT_OGL_ALBERTA)) {
7350  INTERESTING("OGL-Alberta-2.1");
7351  }
7352  else if (INFILE(_LT_OGL_CANADA_EN) || INFILE(_LT_OGL_CANADA_FR)) {
7353  INTERESTING("OGL-Canada-2.0");
7354  }
7356  /*
7357  * Parity Public License 6.0.0
7358  */
7359  if (INFILE(_LT_PARITY_600)) {
7360  INTERESTING("Parity-6.0.0");
7361  }
7363  /*
7364  * Licence Art Libre 1.3
7365  */
7366  if (INFILE(_LT_LAL_13)) {
7367  INTERESTING("LAL-1.3");
7368  }
7370  /*
7371  * COIL-1.0 (Copyfree Open Innovation License)
7372  */
7373  if (INFILE(_LT_COIL_10)) {
7374  INTERESTING("COIL-1.0");
7375  }
7377  /*
7378  * TTWL (Text-Tabs+Wrap License)
7379  */
7380  if (INFILE(_LT_TTWL)) {
7381  INTERESTING("TTWL");
7382  }
7384  /*
7385  * HIDAPI License
7386  */
7387  if (INFILE(_LT_HIDAPI)) {
7388  INTERESTING("HIDAPI");
7389  }
7391  /*
7392  * ulem License
7393  */
7394  if (INFILE(_LT_ULEM)) {
7395  INTERESTING("ulem");
7396  }
7398  /*
7399  * UnixCrypt License
7400  */
7401  if (INFILE(_LT_UNIXCRYPT)) {
7402  INTERESTING("UnixCrypt");
7403  }
7405  /*
7406  * fwlw License
7407  */
7408  if (INFILE(_LT_FWLW)) {
7409  INTERESTING("fwlw");
7410  }
7412  /*
7413  * McPhee Slideshow License
7414  */
7415  if (INFILE(_LT_MCPHEE_SLIDESHOW)) {
7416  INTERESTING("McPhee-slideshow");
7417  }
7419  /*
7420  * MIPS Computer Systems License
7421  */
7422  if (INFILE(_LT_MIPS_CS)) {
7423  INTERESTING("MIPS");
7424  }
7426  /*
7427  * MPEG Software Simulation Group License
7428  */
7429  if (INFILE(_LT_MPEG_SSG)) {
7430  INTERESTING("MPEG-SSG");
7431  }
7433  /*
7434  * Kastrup License
7435  */
7436  if (INFILE(_LT_KASTRUP)) {
7437  INTERESTING("Kastrup");
7438  }
7440  /*
7441  * swrule License
7442  */
7443  if (INFILE(_LT_SWRULE)) {
7444  INTERESTING("swrule");
7445  }
7447  /*
7448  * softSurfer License
7449  */
7450  if (INFILE(_LT_SOFTSURFER)) {
7451  INTERESTING("softSurfer");
7452  }
7454  /*
7455  * Widget Workshop License
7456  */
7457  if (INFILE(_LT_WIDGET_WORKSHOP)) {
7458  INTERESTING("Widget-Workshop");
7459  }
7461  /*
7462  * LPD-document (Peter Deutsch Document License)
7463  */
7464  if (INFILE(_LT_LPD_DOCUMENT)) {
7465  INTERESTING("LPD-document");
7466  }
7468  /*
7469  * Zeeff License
7470  */
7471  if (INFILE(_LT_ZEEFF)) {
7472  INTERESTING("Zeeff");
7473  }
7475  /*
7476  * DEC-3-Clause License
7477  */
7478  if (INFILE(_LT_DEC_3_CLAUSE)) {
7479  INTERESTING("DEC-3-Clause");
7480  }
7482  /*
7483  * Lucida Bitmap Fonts (Bigelow & Holmes)
7484  */
7485  if (INFILE(_LT_LUCIDA_BITMAP)) {
7486  INTERESTING("Lucida-Bitmap-Fonts");
7487  }
7489  /*
7490  * ISO 8879 Permission
7491  */
7492  if (INFILE(_LT_ISO_8879)) {
7493  INTERESTING("ISO-permission");
7494  }
7496  /*
7497  * threeparttable License
7498  */
7499  if (INFILE(_LT_THREEPARTTABLE)) {
7500  INTERESTING("threeparttable");
7501  }
7503  /*
7504  * OWL-0.9.4 (Open Works License)
7505  */
7506  if (INFILE(_LT_OWL_094)) {
7507  INTERESTING("OWL-0.9.4");
7508  }
7510  /*
7511  * vhfPL 1.1
7512  */
7513  if (INFILE(_LT_VHFPL_11)) {
7514  INTERESTING("vhfPL-1.1");
7515  }
7517  /*
7518  * NXLOG Public License 1.0
7519  */
7520  if (INFILE(_LT_NXLOG_PL_10)) {
7521  INTERESTING("NXLOG-PL-1.0");
7522  }
7524  /*
7525  * Devblocks Public License 1.0
7526  */
7527  if (INFILE(_LT_DEVBLOCKS_10)) {
7528  INTERESTING("Devblocks-1.0");
7529  }
7531  /*
7532  * Treeware License
7533  */
7534  if (INFILE(_LT_TREEWARE_1) || INFILE(_LT_TREEWARE_2) || INFILE(_LT_TREEWARE_OPT2)) {
7535  INTERESTING("Treeware");
7536  }
7538  /*
7539  * AMD ASPF 2023
7540  */
7541  if (INFILE(_LT_AMD_ASPF_2023) && NOT_INFILE(_TITLE_AMD_SEV)) {
7542  INTERESTING("AMD-ASPF-2023");
7543  }
7545  /*
7546  * Bosch Sensortec 2023
7547  */
7548  if (INFILE(_LT_BOSCH_SENSORTEC)) {
7549  INTERESTING("Bosch-Sensortec");
7550  }
7552  /*
7553  * Broadcom firmware licenses
7554  */
7555  if (INFILE(_LT_BROADCOM_RPI)) {
7556  INTERESTING("Broadcom-Raspberry-Pi");
7557  }
7558  else if (INFILE(_LT_BROADCOM_CONFIDENTIAL)) {
7559  INTERESTING("Broadcom-Confidential");
7560  }
7562  /*
7563  * Marvell Firmware 2019
7564  */
7565  if (INFILE(_LT_MARVELL_FW)) {
7566  INTERESTING("Marvell-Firmware-2019");
7567  }
7569  /*
7570  * MediaTek Proprietary 2008
7571  */
7572  if (INFILE(_LT_MEDIATEK_2008)) {
7573  INTERESTING("MediaTek-Proprietary-2008");
7574  }
7576  /*
7577  * Microchip Products 2018
7578  */
7579  if (INFILE(_LT_MICROCHIP_2018)) {
7580  INTERESTING("Microchip-Products-2018");
7581  }
7583  /*
7584  * Motorola License
7585  */
7586  if (INFILE(_LT_MOTOROLA)) {
7587  INTERESTING("Motorola");
7588  }
7590  /*
7591  * Nortel DASA License
7592  */
7593  if (INFILE(_LT_NORTEL_DASA)) {
7594  INTERESTING("Nortel-DASA");
7595  }
7597  /*
7598  * NVIDIA with Government Qualifications
7599  */
7600  if (INFILE(_LT_NVIDIA_GOV)) {
7601  INTERESTING("NVIDIA-Gov");
7602  }
7604  /*
7605  * NXP Linux Firmware
7606  */
7607  if (INFILE(_LT_NXP_LINUX_FW)) {
7608  INTERESTING("NXP-Linux-Firmware");
7609  }
7611  /*
7612  * Rockchip Proprietary (various years)
7613  */
7614  if (INFILE(_LT_ROCKCHIP_2023)) {
7615  INTERESTING("Rockchip-Proprietary-2023");
7616  }
7617  else if (INFILE(_LT_ROCKCHIP_2022)) {
7618  INTERESTING("Rockchip-Proprietary-2022");
7619  }
7620  else if (INFILE(_LT_ROCKCHIP_2019)) {
7621  INTERESTING("Rockchip-Proprietary-2019");
7622  }
7624  /*
7625  * Silicon Image 2007
7626  */
7627  if (INFILE(_LT_SILICON_IMAGE)) {
7628  INTERESTING("Silicon-Image-2007");
7629  }
7631  /*
7632  * Texas Instruments licenses
7633  */
7634  if (INFILE(_LT_TI_RESTRICTED)) {
7635  INTERESTING("TI-Restricted");
7636  }
7637  else if (INFILE(_LT_TI_LINUX_FW) && NOT_INFILE(_LT_TI_TFL)) {
7638  INTERESTING("TI-Linux-Firmware");
7639  }
7641  /*
7642  * Wind River Commercial License
7643  */
7644  if (INFILE(_LT_WIND_RIVER)) {
7645  INTERESTING("Wind-River-Commercial");
7646  }
7648  /*
7649  * BigScience/CreativeML RAIL licenses
7650  */
7651  if (INFILE(_LT_CREATIVEML_RAIL_M2)) {
7652  INTERESTING("CreativeML-OpenRAIL-M2");
7653  }
7654  else if (INFILE(_LT_STABLE_DIFFUSION)) {
7655  INTERESTING("CreativeML-OpenRAIL-M");
7656  }
7657  else if (INFILE(_LT_BIGSCIENCE_RAIL_M)) {
7658  INTERESTING("BigScience-OpenRAIL-M");
7659  }
7661  /*
7662  * NYSL 0.9982 (Japanese license)
7663  */
7664  if (INFILE(_LT_NYSL_JP)) {
7665  INTERESTING("NYSL-0.9982");
7666  }
7668  /*
7669  * AI/ML model licenses
7670  */
7671  if (INFILE(_LT_GEMMA_PUP)) {
7672  INTERESTING("Gemma-PUP");
7673  }
7675  if (INFILE(_LT_GEMINI_TOS)) {
7676  INTERESTING("Gemini-API-TOS");
7677  }
7679  if (INFILE(_LT_PLAYGROUND_V2)) {
7680  INTERESTING("Playground-v2-Community");
7681  }
7683  if (INFILE(_LT_SALESFORCE_AI_AUP)) {
7684  INTERESTING("Salesforce-AI-AUP");
7685  }
7687  if (INFILE(_LT_OPENAI_TOU)) {
7688  INTERESTING("OpenAI-TOU");
7689  }
7691  if (INFILE(_LT_GOOGLE_ML_KIT)) {
7692  INTERESTING("Google-ML-Kit-TOS");
7693  }
7695  if (INFILE(_LT_MAX_MOJO)) {
7696  INTERESTING("MAX-Mojo-Community");
7697  }
7699  if (INFILE(_LT_STACK_TOS)) {
7700  INTERESTING("The-Stack-TOS");
7701  }
7703  if (INFILE(_LT_DATABRICKS_DB)) {
7704  INTERESTING("Databricks-DB");
7705  }
7707  /*
7708  * Patent licenses
7709  */
7710  if (INFILE(_LT_CISCO_AVC)) {
7711  INTERESTING("Cisco-AVC-H264");
7712  }
7714  if (INFILE(_LT_XIPH_PATENT)) {
7715  INTERESTING("Xiph-Opus-Patent");
7716  }
7718  /*
7719  * CERN Attribution 1995
7720  */
7721  if (INFILE(_LT_CERN_ATTRIB)) {
7722  INTERESTING("CERN-Attribution-1995");
7723  }
7725  /*
7726  * Font licenses
7727  */
7728  if (INFILE(_LT_KFGQPC)) {
7729  INTERESTING("KFGQPC-Uthmanic-Script");
7730  }
7732  if (INFILE(_LT_MANFRED_KLEIN)) {
7733  INTERESTING("Manfred-Klein-Fonts");
7734  }
7736  if (INFILE(_LT_WADALAB)) {
7737  INTERESTING("Wadalab");
7738  }
7740  if (INFILE(_LT_GENERALUSER_GS)) {
7741  INTERESTING("GeneralUser-GS-2.0");
7742  }
7744  /*
7745  * ASN.1 Object Dumping Code License
7746  */
7747  if (INFILE(_LT_ASN1_DUMP)) {
7748  INTERESTING("ASN1-Object-Dump");
7749  }
7751  /*
7752  * musl attribution exception
7753  */
7754  if (INFILE(_LT_MUSL_EXCEPTION)) {
7755  INTERESTING("musl-exception");
7756  }
7758  /*
7759  * Commercial/proprietary software licenses
7760  */
7761  if (INFILE(_LT_CLEARTHOUGHT_20)) {
7762  INTERESTING("Clearthought-2.0");
7763  }
7765  if (INFILE(_LT_CODEXIA)) {
7766  INTERESTING("Codexia");
7767  }
7769  if (INFILE(_LT_CRUNCHBASE)) {
7770  INTERESTING("Crunchbase-Data");
7771  }
7773  if (INFILE(_LT_CUBIWARE_10)) {
7774  INTERESTING("Cubiware-Software-1.0");
7775  }
7777  if (INFILE(_LT_CWE_TOU)) {
7778  INTERESTING("CWE-TOU");
7779  }
7781  if (INFILE(_LT_DAMAIL)) {
7782  INTERESTING("DAMAIL");
7783  }
7785  if (INFILE(_LT_DATAMEKANIX)) {
7786  INTERESTING("DataMekanix");
7787  }
7789  if (INFILE(_LT_DENNIS_FERGUSON)) {
7790  INTERESTING("Dennis-Ferguson");
7791  }
7793  if (INFILE(_LT_DHTMLAB_PUBLIC)) {
7794  INTERESTING("dhtmlab-Public");
7795  }
7797  if (INFILE(_LT_DOKPLOY_DSAL)) {
7798  INTERESTING("Dokploy-DSAL-1.0");
7799  }
7801  if (INFILE(_LT_DTREE)) {
7802  INTERESTING("dtree");
7803  }
7805  if (INFILE(_LT_ECFONTS)) {
7806  INTERESTING("ECFonts-1.0");
7807  }
7809  if (INFILE(_LT_ECMA_NO_PATENT)) {
7810  INTERESTING("Ecma-No-Patent");
7811  }
7812  else if (INFILE(_LT_ECMA_STD_2024)) {
7813  INTERESTING("Ecma-Standard-2024");
7814  }
7815  else if (INFILE(_LT_ECMA_DOC)) {
7816  INTERESTING("Ecma-Documentation");
7817  }
7819  if (INFILE(_LT_EPAPERPRESS)) {
7820  INTERESTING("ePaperPress");
7821  }
7823  if (INFILE(_LT_EQVSL)) {
7824  INTERESTING("eQVSL-1.0");
7825  }
7827  if (INFILE(_LT_FABIEN_TASSIN)) {
7828  INTERESTING("Fabien-Tassin");
7829  }
7831  if (INFILE(_LT_FLEXBYTE)) {
7832  INTERESTING("Flexbyte");
7833  }
7835  if (INFILE(_LT_FPL)) {
7836  INTERESTING("FPL");
7837  }
7839  if (INFILE(_LT_FTDI)) {
7840  INTERESTING("FTDI");
7841  }
7843  if (INFILE(_LT_GDCL)) {
7844  INTERESTING("GDCL");
7845  }
7847  if (INFILE(_LT_GOOD_BOY)) {
7848  INTERESTING("Good-Boy");
7849  }
7851  if (INFILE(_LT_HACKING_LICENSE)) {
7852  INTERESTING("Hacking-License");
7853  }
7855  if (INFILE(_LT_HERE_PROPRIETARY)) {
7856  INTERESTING("HERE-Proprietary");
7857  }
7858  else if (INFILE(_LT_HERE_DISCLAIMER)) {
7859  INTERESTING("HERE-Disclaimer");
7860  }
7862  if (INFILE(_LT_HOT_POTATO)) {
7863  INTERESTING("Hot-Potato");
7864  }
7866  if (INFILE(_LT_HTML5_SPEC)) {
7867  INTERESTING("HTML5-License");
7868  }
7870  if (INFILE(_LT_IAN_KAPLAN)) {
7871  INTERESTING("Ian-Kaplan");
7872  }
7874  if (INFILE(_LT_ICANN_PUBLIC)) {
7875  INTERESTING("ICANN-Public");
7876  }
7878  if (INFILE(_LT_ISSL_2022)) {
7879  INTERESTING("ISSL-2022");
7880  }
7882  if (INFILE(_LT_JASON_MAYES)) {
7883  INTERESTING("Jason-Mayes");
7884  }
7886  if (INFILE(_LT_JJ2000)) {
7887  INTERESTING("JJ2000");
7888  }
7890  if (INFILE(_LT_JSFROMHELL)) {
7891  INTERESTING("JSFromHell");
7892  }
7894  if (INFILE(_LT_KARL_PETERSON)) {
7895  INTERESTING("Karl-Peterson");
7896  }
7898  if (INFILE(_LT_KEITH_RULE)) {
7899  INTERESTING("Keith-Rule");
7900  }
7902  if (INFILE(_LT_KO_MAN_PAGE)) {
7903  INTERESTING("Korean-Manpage");
7904  }
7906  if (INFILE(_LT_LENS_TOS)) {
7907  INTERESTING("Lens-TOS-2023");
7908  }
7910  if (INFILE(_LT_LINUXHOWTOS)) {
7911  INTERESTING("LinuxHowtos");
7912  }
7914  if (INFILE(_LT_MARKUS_MUMMERT)) {
7915  INTERESTING("Markus-Mummert");
7916  }
7918  if (INFILE(_LT_MATTHEW_KWAN)) {
7919  INTERESTING("Matthew-Kwan");
7920  }
7922  if (INFILE(_LT_NCSC_NL)) {
7923  INTERESTING("NCSC-NL-Disclaimer");
7924  }
7926  if (INFILE(_LT_NEWRAN)) {
7927  INTERESTING("Newran");
7928  }
7930  if (INFILE(_LT_NIST_SRD)) {
7931  INTERESTING("NIST-SRD");
7932  }
7934  if (INFILE(_LT_NWHM)) {
7935  INTERESTING("NWHM");
7936  }
7938  if (INFILE(_LT_OOURA_2001)) {
7939  INTERESTING("OOURA-2001");
7940  }
7942  /*
7943  * Oracle licenses
7944  */
7945  if (INFILE(_LT_ORACLE_MASTER)) {
7946  INTERESTING("Oracle-Master-Agreement");
7947  }
7948  else if (INFILE(_LT_ORACLE_COMM_DB)) {
7949  INTERESTING("Oracle-Commercial-DB-11g2");
7950  }
7951  else if (INFILE(_LT_ORACLE_FREE)) {
7952  INTERESTING("Oracle-Free-2018");
7953  }
7955  if (INFILE(_LT_O_YOUNG_JONG)) {
7956  INTERESTING("O-Young-Jong");
7957  }
7959  if (INFILE(_LT_PAUL_HSIEH_DERIV)) {
7960  INTERESTING("Paul-Hsieh-Derivative");
7961  }
7963  if (INFILE(_LT_PAUL_HSIEH_EXP)) {
7964  INTERESTING("Paul-Hsieh-Exposition");
7965  }
7967  if (INFILE(_LT_PAULO_SOARES)) {
7968  INTERESTING("Paulo-Soares");
7969  }
7971  if (INFILE(_LT_PERL_10)) {
7972  INTERESTING("Perl-1.0");
7973  }
7975  if (INFILE(_LT_PFE_NOTICE)) {
7976  INTERESTING("PFE-Proprietary");
7977  }
7979  if (INFILE(_LT_POKE_WIGGLE)) {
7980  INTERESTING("Poke-Wiggle-Proprietary");
7981  }
7983  if (INFILE(_LT_QUIRKSMODE)) {
7984  INTERESTING("Quirksmode");
7985  }
7987  if (INFILE(_LT_RED_HAT_TM)) {
7988  INTERESTING("Red-Hat-Trademarks");
7989  }
7991  if (INFILE(_LT_RYSZARD_SZOPA)) {
7992  INTERESTING("Ryszard-Szopa");
7993  }
7995  if (INFILE(_LT_SCRIPT_ASYLUM)) {
7996  INTERESTING("Script-Asylum");
7997  }
7999  if (INFILE(_LT_SCRUB)) {
8000  INTERESTING("SCRUB");
8001  }
8003  if (INFILE(_LT_SHITAL_SHAH)) {
8004  INTERESTING("Shital-Shah");
8005  }
8007  if (INFILE(_LT_SNAPEDA_EXCEPTION)) {
8008  INTERESTING("SnapEDA-Design-Exception-1.0");
8009  }
8011  if (INFILE(_LT_STU_NICHOLLS)) {
8012  INTERESTING("Stu-Nicholls");
8013  }
8015  if (INFILE(_LT_TEAMDEV)) {
8016  INTERESTING("TeamDev-Services");
8017  }
8019  if (INFILE(_LT_TCG_SPEC_V2)) {
8020  INTERESTING("TCG-Spec-License-v2");
8021  }
8023  if (INFILE(_LT_TIGER_CRYPTO)) {
8024  INTERESTING("Tiger-Crypto");
8025  }
8027  if (INFILE(_LT_TIGRA_CAL)) {
8028  INTERESTING("Tigra-Calendar-3.2");
8029  }
8031  if (INFILE(_LT_TIMESTAMP_PICKER)) {
8032  INTERESTING("Timestamp-Picker");
8033  }
8035  if (INFILE(_LT_UBC_FREE)) {
8036  INTERESTING("UBC");
8037  }
8039  if (INFILE(_LT_UNPBOOK)) {
8040  INTERESTING("unpbook");
8041  }
8043  if (INFILE(_LT_VBACCELERATOR)) {
8044  INTERESTING("vbAccelerator");
8045  }
8047  if (INFILE(_LT_VISUAL_IDIOT)) {
8048  INTERESTING("Visual-Idiot");
8049  }
8051  if (INFILE(_LT_WHOSONFIRST)) {
8052  INTERESTING("WhosOnFirst");
8053  }
8055  if (INFILE(_LT_WILLIAM_ALEXANDER)) {
8056  INTERESTING("William-Alexander");
8057  }
8059  if (INFILE(_LT_WINK)) {
8060  INTERESTING("Wink");
8061  }
8063  if (INFILE(_LT_WINZIP_SE)) {
8064  INTERESTING("WinZip-Self-Extractor");
8065  }
8067  if (INFILE(_LT_WROX_DOWNLOAD)) {
8068  INTERESTING("Wrox-Download");
8069  }
8071  if (INFILE(_LT_WXWINDOWS_U_30)) {
8072  INTERESTING("wxWindows-Unrestricted-3.0");
8073  }
8075  if (INFILE(_LT_XXD)) {
8076  INTERESTING("xxd");
8077  }
8079  if (INFILE(_LT_YALE_CAS)) {
8080  INTERESTING("Yale-CAS");
8081  }
8083  if (INFILE(_LT_YENSDESIGN)) {
8084  INTERESTING("Yensdesign");
8085  }
8087  if (INFILE(_LT_YOLO_10)) {
8088  INTERESTING("YOLO-1.0");
8089  }
8091  if (INFILE(_LT_ZIPEG)) {
8092  INTERESTING("Zipeg");
8093  }
8095  if (INFILE(_LT_ZUGFERD)) {
8096  INTERESTING("ZUGFeRD-2.2.0");
8097  }
8099  if (INFILE(_LT_CAREWARE)) {
8100  INTERESTING("Careware");
8101  }
8103  if (INFILE(_LT_CCL_2026)) {
8104  INTERESTING("CCL-2026");
8105  }
8107  if (INFILE(_LT_CCLRC)) {
8108  INTERESTING("CCLRC");
8109  }
8111  if (INFILE(_LT_DBAD_11)) {
8112  INTERESTING("DBAD-1.1");
8113  }
8114  else if (INFILE(_LT_DBAD)) {
8115  INTERESTING("DBAD");
8116  }
8118  if (INFILE(_LT_ASWF_DIGITAL_11)) {
8119  INTERESTING("ASWF-Digital-Assets-1.1");
8120  }
8121  else if (INFILE(_LT_ASWF_DIGITAL_10)) {
8122  INTERESTING("ASWF-Digital-Assets-1.0");
8123  }
8125  if (INFILE(_LT_CERN_OHL_S_20)) {
8126  INTERESTING("CERN-OHL-S-2.0");
8127  }
8128  else if (INFILE(_LT_CERN_OHL_W_20)) {
8129  INTERESTING("CERN-OHL-W-2.0");
8130  }
8131  else if (INFILE(_LT_CERN_OHL_P_20)) {
8132  INTERESTING("CERN-OHL-P-2.0");
8133  }
8135  if (INFILE(_LT_ESA_PL_SC_24)) {
8136  INTERESTING("ESA-PL-strong-copyleft-2.4");
8137  }
8138  else if (INFILE(_LT_ESA_PL_PERM_24)) {
8139  INTERESTING("ESA-PL-permissive-2.4");
8140  }
8142  if (INFILE(_LT_ADOBE_UTOPIA)) {
8143  INTERESTING("Adobe-Utopia");
8144  }
8146  if (INFILE(_LT_ALGLIB_DOC)) {
8147  INTERESTING("ALGLIB-Documentation");
8148  }
8150  if (INFILE(_LT_ARPHIC_1999)) {
8151  INTERESTING("Arphic-1999");
8152  }
8154  if (INFILE(_LT_ASPELL_RU)) {
8155  INTERESTING("Aspell-RU");
8156  }
8158  if (INFILE(_LT_ASTERISK_EXCEPTION)) {
8159  INTERESTING("Asterisk-exception");
8160  }
8162  if (INFILE(_LT_BRIAN_GLADMAN)) {
8163  INTERESTING("Brian-Gladman-2-Clause");
8164  }
8166  if (INFILE(_LT_CAPEC_TOU)) {
8167  INTERESTING("CAPEC-tou");
8168  }
8170  if (INFILE(_LT_CHECK_CVS)) {
8171  INTERESTING("check-cvs");
8172  }
8174  if (INFILE(_LT_CRONYX)) {
8175  INTERESTING("Cronyx");
8176  }
8178  if (INFILE(_LT_CVE_TOU)) {
8179  INTERESTING("cve-tou");
8180  }
8182  if (INFILE(_LT_DANTE_TREGLIA)) {
8183  INTERESTING("Game-Programming-Gems");
8184  }
8186  if (INFILE(_LT_FBM)) {
8187  INTERESTING("FBM");
8188  }
8190  if (INFILE(_LT_FREEBSD_DOC)) {
8191  INTERESTING("FreeBSD-DOC");
8192  }
8194  if (INFILE(_LT_GNOME_EXAMPLES_EXCEPTION)) {
8195  INTERESTING("GNOME-examples-exception");
8196  }
8198  if (INFILE(_LT_HYPHEN_BULGARIAN)) {
8199  INTERESTING("hyphen-bulgarian");
8200  }
8202  if (INFILE(_LT_IEC_CODE_EULA)) {
8203  INTERESTING("IEC-Code-Components-EULA");
8204  }
8206  if (INFILE(_LT_JOVE)) {
8207  INTERESTING("jove");
8208  }
8210  if (INFILE(_LT_MAGAZ)) {
8211  INTERESTING("magaz");
8212  }
8214  if (INFILE(_LT_MAILPRIO)) {
8215  INTERESTING("mailprio");
8216  }
8218  if (INFILE(_LT_MINECRAFT_MOD)) {
8219  INTERESTING("MMPL-1.0.1");
8220  }
8222  if (INFILE(_LT_MMIXWARE)) {
8223  INTERESTING("MMIXware");
8224  }
8226  if (INFILE(_LT_MPI_PERMISSIVE)) {
8227  INTERESTING("mpi-permissive");
8228  }
8230  if (INFILE(_LT_MPLUS_FREE_FONT) && NOT_INFILE(_CR_MPLUS)) {
8231  INTERESTING("mplus");
8232  }
8234  if (INFILE(_LT_NTIA_PD)) {
8235  INTERESTING("NTIA-PD");
8236  }
8238  if (INFILE(_LT_OFFIS)) {
8239  INTERESTING("OFFIS");
8240  }
8242  if (INFILE(_LT_OPENVISION)) {
8243  INTERESTING("OpenVision");
8244  }
8246  if (INFILE(_LT_OPL_UK_30)) {
8247  INTERESTING("OPL-UK-3.0");
8248  }
8250  if (INFILE(_LT_PARATYPE_FREE_13)) {
8251  INTERESTING("ParaType-Free-Font-1.3");
8252  }
8254  if (INFILE(_LT_PNMSTITCH)) {
8255  INTERESTING("pnmstitch");
8256  }
8258  if (INFILE(_LT_SSH_KEYSCAN)) {
8259  INTERESTING("ssh-keyscan");
8260  }
8262  if (INFILE(_LT_THIRDEYE)) {
8263  INTERESTING("ThirdEye");
8264  }
8266  if (INFILE(_LT_UNRAR)) {
8267  INTERESTING("UnRAR");
8268  }
8270  if (INFILE(_LT_XZOOM)) {
8271  INTERESTING("xzoom");
8272  }
8274  if (INFILE(_LT_AARDVARK_PY_2014)) {
8275  INTERESTING("Aardvark-I2C/SPI-2014");
8276  }
8278  if (INFILE(_LT_ACCELLERA_SYSTEMC)) {
8279  INTERESTING("SystemC-Open-Source-License-Agreement");
8280  }
8282  if (INFILE(_LT_ACTER_PSL_1_0)) {
8283  INTERESTING("Acter-Public-Source-License-1.0");
8284  }
8286  if (INFILE(_LT_ADAPTEC_EULA)) {
8287  INTERESTING("Adaptec-EULA");
8288  }
8290  if (INFILE(_LT_ADDTHIS_MOBILE_SDK_1_0)) {
8291  INTERESTING("AddThis-Mobile-Application-SDK-License-1.0");
8292  }
8294  if (INFILE(_LT_ADOBE_EULA)) {
8295  INTERESTING("Adobe-EULA");
8296  }
8298  if (INFILE(_LT_AG_GRID_ENTERPRISE)) {
8299  INTERESTING("AG-Grid-Enterprise-License");
8300  }
8302  if (INFILE(_LT_AGTPL)) {
8303  INTERESTING("AGTPL");
8304  }
8306  if (INFILE(_LT_ALEXISISAAC_FREEWARE)) {
8307  INTERESTING("Alexisisaac-Freeware-License");
8308  }
8310  if (INFILE(_LT_AMAZON_REDSHIFT_JDBC)) {
8311  INTERESTING("Amazon-Redshift-JDBC-Driver-License-Agreement");
8312  }
8314  if (INFILE(_LT_AMAZON_SL)) {
8315  INTERESTING("Amazon-Software-License");
8316  }
8318  if (INFILE(_LT_AMD_LINUX_FIRMWARE_EXPORT)) {
8319  INTERESTING("AMD-Linux-Firmware-Export-License");
8320  }
8322  if (INFILE(_LT_ANACONDA_TOS_2024_03_30)) {
8323  INTERESTING("Anaconda-TOS-2024-03-30");
8324  }
8326  if (INFILE(_LT_ANDROID_SDK_PREVIEW_2015)) {
8327  INTERESTING("Android-SDK-Preview-License");
8328  }
8330  if (INFILE(_LT_ANSWERCAREFULLY_TOU_2025)) {
8331  INTERESTING("AnswerCarefully-Dataset-ToU-2025");
8332  }
8334  if (INFILE(_LT_APPFIRE_EULA)) {
8335  INTERESTING("Appfire-EULA");
8336  }
8338  if (INFILE(_LT_APPLE_ATTRIBUTION)) {
8339  INTERESTING("Apple-Attribution-License");
8340  }
8342  if (INFILE(_LT_APPLE_MPEG_4)) {
8343  INTERESTING("Apple-MPEG-4-License");
8344  }
8346  if (INFILE(_LT_APPSFLYER_FRAMEWORK)) {
8347  INTERESTING("AppsFlyer-Framework-License");
8348  }
8350  if (INFILE(_LT_ARM_CORTEX_MX)) {
8351  INTERESTING("ARM-Cortex-Mx-Proprietary");
8352  }
8354  if (INFILE(_LT_ARM_LLVM_SGA)) {
8355  INTERESTING("ARM-LLVM-Grant");
8356  }
8358  if (INFILE(_LT_ASMUS)) {
8359  INTERESTING("ASMUS-License");
8360  }
8362  if (INFILE(_LT_ATLASSIAN_MARKETPLACE_TOU)) {
8363  INTERESTING("Atlassian-Marketplace-Terms-of-Use");
8364  }
8366  if (INFILE(_LT_AUTHORIZENET_SDK)) {
8367  INTERESTING("AuthorizeNet-SDK-License");
8368  }
8370  if (INFILE(_LT_AUTODESK_3D_SFT_3_0)) {
8371  INTERESTING("Autodesk-3D-Studio-File-Toolkit-for-Release-3");
8372  }
8374  if (INFILE(_LT_AUTOIT_EULA)) {
8375  INTERESTING("Autoit-EULA");
8376  }
8378  if (INFILE(_LT_BEA_2_1)) {
8379  INTERESTING("BEA-2.1");
8380  }
8382  if (INFILE(_LT_BEAL_SCREAMER)) {
8383  INTERESTING("Beal-Screamer-License");
8384  }
8386  if (INFILE(_LT_BEEGFS_EULA_2024)) {
8387  INTERESTING("BeeGFS-EULA-2024");
8388  }
8390  if (INFILE(_LT_BINARY_LINUX_FIRMWARE)) {
8391  INTERESTING("Binary-Only-Linux-Firmware-License");
8392  }
8394  if (INFILE(_LT_BIOPYTHON)) {
8395  INTERESTING("Biopython-License");
8396  }
8398  if (INFILE(_LT_BPEL4WS_SPEC)) {
8399  INTERESTING("BPEL4WS-Specification-license");
8400  }
8402  if (INFILE(_LT_BRANKAS_OPEN_LICENSE_1_0)) {
8403  INTERESTING("Brankas-Open-License-1.0");
8404  }
8406  if (INFILE(_LT_BROADCOM_LINKING_UNMODIFIED)) {
8407  INTERESTING("Broadcom-Linking-Exception-if-unmodified");
8408  }
8410  if (INFILE(_LT_BROADCOM_LINUX_FIRMWARE)) {
8411  INTERESTING("Broadcom-Linux-Firmware-License");
8412  }
8414  if (INFILE(_LT_BROADCOM_LINUX_TIMER)) {
8415  INTERESTING("Broadcom-Warranty-Disclaimer");
8416  }
8418  if (INFILE(_LT_BROADCOM_OPUS_PATENT)) {
8419  INTERESTING("Broadcom-Opus-Patent-License");
8420  }
8422  if (INFILE(_LT_BROADCOM_STANDARD_TERMS)) {
8423  INTERESTING("Broadcom-Standard-Terms");
8424  }
8426  if (INFILE(_LT_BROADCOM_UNMODIFIED_EXCEPTIO)) {
8427  INTERESTING("Broadcom-Unmodified-Linking-Exception");
8428  }
8430  if (INFILE(_LT_BSD_DPT)) {
8431  INTERESTING("BSD-DPT");
8432  }
8434  if (INFILE(_LT_BUDIBASE_SQS_2023)) {
8435  INTERESTING("Budibase-SQS-License-2023");
8436  }
8438  if (INFILE(_LT_BUGSENSE_SDK)) {
8439  INTERESTING("BugSense-SDK-License");
8440  }
8442  if (INFILE(_LT_BYTEMARK)) {
8443  INTERESTING("BYTEmark-License");
8444  }
8446  if (INFILE(_LT_CADENCE_LINUX_FIRMWARE)) {
8447  INTERESTING("Cadence-Linux-Firmware-License");
8448  }
8450  if (INFILE(_LT_CAMUNDA_1_0)) {
8451  INTERESTING("Camunda-License-1.0");
8452  }
8454  if (INFILE(_LT_CANONICAL_HA_CLA_ANY_E_V1_2)) {
8455  INTERESTING("Canonical-HA-CLA-ANY-E_v1.2");
8456  }
8458  if (INFILE(_LT_CANONICAL_HA_CLA_ANY_I_V1_2)) {
8459  INTERESTING("Canonical-HA-CLA-ANY-I_v1.2");
8460  }
8462  if (INFILE(_LT_CAVIUM_MALLOC)) {
8463  INTERESTING("Cavium-malloc-License");
8464  }
8466  if (INFILE(_LT_CEXCEPT_2008)) {
8467  INTERESTING("cexcept-License-2008");
8468  }
8470  if (INFILE(_LT_CGIC)) {
8471  INTERESTING("CGIC-License");
8472  }
8474  if (INFILE(_LT_CHILLICREAM_1_0)) {
8475  INTERESTING("ChilliCream-License-1.0");
8476  }
8478  if (INFILE(_LT_CNCF_CORPORATE_CLA_1_0)) {
8479  INTERESTING("CNCF-Corporate-CLA-1.0");
8480  }
8482  if (INFILE(_LT_CNCF_INDIVIDUAL_CLA_1_0)) {
8483  INTERESTING("CNCF-Individual-CLA-1.0");
8484  }
8486  if (INFILE(_LT_CODEGURU_PERMISSIONS)) {
8487  INTERESTING("CodeGuru-Permissions");
8488  }
8490  if (INFILE(_LT_COMMONJ_TIMER)) {
8491  INTERESTING("CommonJ-Timer-License");
8492  }
8494  if (INFILE(_LT_COUCHBASE_COMMUNITY)) {
8495  INTERESTING("Couchbase-Community-Edition-License");
8496  }
8498  if (INFILE(_LT_CPP_CORE_GUIDELINES)) {
8499  INTERESTING("CppCoreGuidelines-License");
8500  }
8502  if (INFILE(_LT_CRAPL_0_1)) {
8503  INTERESTING("CRAPL-v0-BETA-1");
8504  }
8506  if (INFILE(_LT_CSLA)) {
8507  INTERESTING("CSLA-License");
8508  }
8510  if (INFILE(_LT_DCO_1_0)) {
8511  INTERESTING("DCO-1.0");
8512  }
8514  if (INFILE(_LT_DCO_1_1)) {
8515  INTERESTING("DCO-1.1");
8516  }
8518  if (INFILE(_LT_DEEPSEEK_LA_1_0)) {
8519  INTERESTING("DeepSeek-License-Agreement-v1.0");
8520  }
8522  if (INFILE(_LT_DIFFGRAM_DLV2)) {
8523  INTERESTING("Diffgram-DLv2");
8524  }
8526  if (INFILE(_LT_DIVX_OPEN_2_1)) {
8527  INTERESTING("DivX-Open-License-2.1");
8528  }
8530  if (INFILE(_LT_DO_NO_HARM_0_1)) {
8531  INTERESTING("Do-No-Harm");
8532  }
8534  if (INFILE(_LT_DOUGLAS_YOUNG)) {
8535  INTERESTING("Douglas-Young-License");
8536  }
8538  if (INFILE(_LT_DYNARCH_DEVELOPER)) {
8539  INTERESTING("Dynarch-Developer-Agreement");
8540  }
8542  if (INFILE(_LT_ECLIPSE_TCK_1_1)) {
8543  INTERESTING("Eclipse-TCK-v1.1");
8544  }
8546  if (INFILE(_LT_ECMA_PATENT_COC_0)) {
8547  INTERESTING("Ecma-Historical-Code-of-Conduct-in-Patent-Matters");
8548  }
8550  if (INFILE(_LT_ECMA_PATENT_COC_1)) {
8551  INTERESTING("Ecma-Code-of-Conduct-in-Patent-Matters-v1");
8552  }
8554  if (INFILE(_LT_ECMA_PATENT_COC_2)) {
8555  INTERESTING("Ecma-Code-of-Conduct-in-Patent-Matters-v2");
8556  }
8558  if (INFILE(_LT_ENHYDRA_1_1)) {
8559  INTERESTING("Enhydra-1.1");
8560  }
8562  if (INFILE(_LT_ENISA_LEGAL_NOTICE_2025)) {
8563  INTERESTING("ENISA-Legal-Notice-2025");
8564  }
8566  if (INFILE(_LT_ERIC_GLASS)) {
8567  INTERESTING("Eric-Glass-License");
8568  }
8570  if (INFILE(_LT_ESRI_DEVKIT)) {
8571  INTERESTING("Esri-Developer-Kit-License");
8572  }
8574  if (INFILE(_LT_EXCELSIOR_JET_RUNTIME)) {
8575  INTERESTING("Excelsior-JET-Runtime-License");
8576  }
8578  if (INFILE(_LT_FACEBOOK_NUCLIDE)) {
8579  INTERESTING("Facebook-Nuclide-Software-License");
8580  }
8582  if (INFILE(_LT_FACEBOOK_PATENT_RIGHTS_2)) {
8583  INTERESTING("Facebook-Patent-Rights-2");
8584  }
8586  if (INFILE(_LT_FIRST_EPSS_USAGE)) {
8587  INTERESTING("FIRST-EPSS-Usage-Agreement");
8588  }
8590  if (INFILE(_LT_FISH_AUDIO_RESEARCH_2026_03_)) {
8591  INTERESTING("Fish-Audio-Research-License-Agreement-2026-03-07");
8592  }
8594  if (INFILE(_LT_FRAUNHOFER_ISO_14496_10)) {
8595  INTERESTING("Fraunhofer-ISO-14496-10-License");
8596  }
8598  if (INFILE(_LT_FTPBEAN)) {
8599  INTERESTING("FtpBean-License");
8600  }
8602  if (INFILE(_LT_GARETH_MCCAUGHAN)) {
8603  INTERESTING("Gareth-McCaughan-License");
8604  }
8606  if (INFILE(_LT_GATLING_HIGHCHARTS)) {
8607  INTERESTING("Gatling-Highcharts-License");
8608  }
8610  if (INFILE(_LT_GEMMA_TOU_2024_04_01)) {
8611  INTERESTING("Gemma-ToU-2024-04-01");
8612  }
8614  if (INFILE(_LT_GEMMA_TOU_2025_03_24)) {
8615  INTERESTING("Gemma-ToU-2025-03-24");
8616  }
8618  if (INFILE(_LT_GENERIC_CLA)) {
8619  INTERESTING("Generic-CLA");
8620  }
8622  if (INFILE(_LT_GITHUB_CODEQL_TERMS_2020)) {
8623  INTERESTING("GitHub-CodeQL-Terms-2020");
8624  }
8626  if (INFILE(_LT_GITLEAKS_ACTION_EULA)) {
8627  INTERESTING("Gitleaks-Action-EULA");
8628  }
8630  if (INFILE(_LT_GNU_EMACS_GPL_1985)) {
8631  INTERESTING("GNU-emacs-General-Public-License-1985");
8632  }
8634  if (INFILE(_LT_GOOGLE_APIS_TOS_2021)) {
8635  INTERESTING("Google-APIs-TOS-2021");
8636  }
8638  if (INFILE(_LT_GOOGLE_CLA)) {
8639  INTERESTING("Google-CLA");
8640  }
8642  if (INFILE(_LT_GOOGLE_CORPORATE_CLA)) {
8643  INTERESTING("Google-Corporate-CLA");
8644  }
8646  if (INFILE(_LT_GOOGLE_PATENT_LICENSE_FUCHSI)) {
8647  INTERESTING("Google-Patent-License-for-Fuchsia");
8648  }
8650  if (INFILE(_LT_GOOGLE_PATENT_LICENSE_GOLANG)) {
8651  INTERESTING("Google-Patent-License-for-Go");
8652  }
8654  if (INFILE(_LT_GOOGLE_PATENT_LICENSE)) {
8655  INTERESTING("Google-Patent-License");
8656  }
8658  if (INFILE(_LT_GOOGLE_TOS_2020)) {
8659  INTERESTING("Google-TOS-2020");
8660  }
8662  if (INFILE(_LT_GRADLE_ENTERPRISE_SLA_2022_1)) {
8663  INTERESTING("Gradle-Enterprise-SLA-2022-");
8664  }
8666  if (INFILE(_LT_GRADLE_TOU_2022_01_13)) {
8667  INTERESTING("Gradle-Terms-of-Use-2022-01-13");
8668  }
8670  if (INFILE(_LT_GSAP_STANDARD_NO_CHARGE_2025)) {
8671  INTERESTING("Standard-No-Charge-GSAP-License-2025");
8672  }
8674  if (INFILE(_LT_GTPL_V2)) {
8675  INTERESTING("GTPL-v2");
8676  }
8678  if (INFILE(_LT_HESSLA)) {
8679  INTERESTING("HESSLA");
8680  }
8682  if (INFILE(_LT_HFOIL_1_0)) {
8683  INTERESTING("HFOILv1.0");
8684  }
8686  if (INFILE(_LT_HISTORICAL_NTP)) {
8687  INTERESTING("Historical-Notice-NTP");
8688  }
8690  if (INFILE(_LT_HTTPGET)) {
8691  INTERESTING("httpget-notice-and-disclaimer");
8692  }
8694  if (INFILE(_LT_HUGO)) {
8695  INTERESTING("Hugo-License");
8696  }
8698  if (INFILE(_LT_IBM_DEVELOPERWORKS_COMMUNITY)) {
8699  INTERESTING("IBM-developerWorks-Community-Download-Agreement");
8700  }
8702  if (INFILE(_LT_IBM_EMPLOYEE_WRITTEN)) {
8703  INTERESTING("IBM-Employee-Written-Software-License");
8704  }
8706  if (INFILE(_LT_IBM_SAMPLE)) {
8707  INTERESTING("IBM-Sample-License");
8708  }
8710  if (INFILE(_LT_ICOT_FREE)) {
8711  INTERESTING("ICOT-Free-Software");
8712  }
8714  if (INFILE(_LT_IDT_NOTICE)) {
8715  INTERESTING("IDT-License-Notice");
8716  }
8718  if (INFILE(_LT_INFINEON_FREE)) {
8719  INTERESTING("Infineon-Free-Software-License");
8720  }
8722  if (INFILE(_LT_INSTALLSITE)) {
8723  INTERESTING("InstallSite-License-Agreement");
8724  }
8726  if (INFILE(_LT_INTEL_SAMPLE_SOURCE_CODE_201)) {
8727  INTERESTING("Intel-Sample-Source-Code-2015");
8728  }
8730  if (INFILE(_LT_INTEL_SCL)) {
8731  INTERESTING("Intel-Source-Code-License-Agreement");
8732  }
8734  if (INFILE(_LT_IOZONE)) {
8735  INTERESTING("IOzone-License");
8736  }
8738  if (INFILE(_LT_ISO_14496_10)) {
8739  INTERESTING("ISO-14496-10");
8740  }
8742  if (INFILE(_LT_ISO_SCHEMATRON_19757_3)) {
8743  INTERESTING("ISO/IEC-19757-3");
8744  }
8746  if (INFILE(_LT_ITC_EULA)) {
8747  INTERESTING("ITC-EULA");
8748  }
8750  if (INFILE(_LT_ITU)) {
8751  INTERESTING("ITU-License");
8752  }
8754  if (INFILE(_LT_ITU_T)) {
8755  INTERESTING("ITU-T-License");
8756  }
8758  if (INFILE(_LT_JETBRAINS_PURCHASE_TERMS)) {
8759  INTERESTING("JetBrains-Purchase-Terms");
8760  }
8762  if (INFILE(_LT_JGRAPH_GENERAL)) {
8763  INTERESTING("JGraph-General-License");
8764  }
8766  if (INFILE(_LT_JIDE_SLA)) {
8767  INTERESTING("JIDE-SLA");
8768  }
8770  if (INFILE(_LT_JOINBASE_CELA_2022)) {
8771  INTERESTING("JoinBase-Community-Edition-License-2022");
8772  }
8774  if (INFILE(_LT_JPEGXR)) {
8775  INTERESTING("JPEG-XR-License");
8776  }
8778  if (INFILE(_LT_KEVAN_STANNARD)) {
8779  INTERESTING("Kevan-Stannard-License");
8780  }
8782  if (INFILE(_LT_KUMAR_ROBOTICS)) {
8783  INTERESTING("Kumar-Robotics-License");
8784  }
8786  if (INFILE(_LT_LARABIE)) {
8787  INTERESTING("Larabie-Fonts-EULA");
8788  }
8790  if (INFILE(_LT_LATTICE_OSL_2017)) {
8791  INTERESTING("Lattice-Open-Source-License-2017");
8792  }
8794  if (INFILE(_LT_LCS_TELEGRAPHICS)) {
8795  INTERESTING("LCS-Telegraphics-License");
8796  }
8798  if (INFILE(_LT_LIBRATO_EXCEPTION)) {
8799  INTERESTING("Librato-Open-License-1.0");
8800  }
8802  if (INFILE(_LT_LIFERAY_EE)) {
8803  INTERESTING("Liferay-Portal-EE-License");
8804  }
8806  if (INFILE(_LT_LIFERAY_MARKETPLACE_TOS)) {
8807  INTERESTING("Liferay-Marketplace-TOS");
8808  }
8810  if (INFILE(_LT_LINUX_DEVICE_DRIVERS)) {
8811  INTERESTING("Linux-Device-Drivers");
8812  }
8814  if (INFILE(_LT_LIVEKIT_MODEL_2024)) {
8815  INTERESTING("LiveKit-Model-License-Agreement-2024");
8816  }
8818  if (INFILE(_LT_LLAMA_2_LICENSE_2023)) {
8819  INTERESTING("Llama-2-Community-License-Agreement-2023");
8820  }
8822  if (INFILE(_LT_LLAMA_3_1_LICENSE_2024)) {
8823  INTERESTING("Llama-3.1-Community-License-Agreement-2024");
8824  }
8826  if (INFILE(_LT_LLAMA_3_2_LICENSE_2024)) {
8827  INTERESTING("Llama-3.2-Community-License-Agreement-2024");
8828  }
8830  if (INFILE(_LT_LLAMA_3_3_LICENSE_2024)) {
8831  INTERESTING("Llama-3.3-Community-License-Agreement-2024");
8832  }
8834  if (INFILE(_LT_LLAMA_4_CLA_2025)) {
8835  INTERESTING("Llama-4-Community-License-Agreement-2025");
8836  }
8838  if (INFILE(_LT_LLAMA_4_LICENSE_2025)) {
8839  INTERESTING("Llama-4-Acceptable-Use-Policy-2025");
8840  }
8842  if (INFILE(_LT_MAPBOX_TOS_2021)) {
8843  INTERESTING("Mapbox-TOS-2021");
8844  }
8846  if (INFILE(_LT_MAPBOX_TOS_2024)) {
8847  INTERESTING("Mapbox-TOS-2024");
8848  }
8850  if (INFILE(_LT_MARVELL_FIRMWARE)) {
8851  INTERESTING("Marvell-Firmware-License");
8852  }
8854  if (INFILE(_LT_MATT_GALLAGHER_ATTRIBUTION)) {
8855  INTERESTING("Matt-Gallagher-Attribution-License");
8856  }
8858  if (INFILE(_LT_MCAFEE_TOU)) {
8859  INTERESTING("McAfee-Free-License");
8860  }
8862  if (INFILE(_LT_MEDIATEK_NO_WARRANTY)) {
8863  INTERESTING("MediaTek-No-Warranty-Clause");
8864  }
8866  if (INFILE(_LT_MEDIATEK_PROPRIETARY_2005)) {
8867  INTERESTING("Mediatek-Proprietary-License-2005");
8868  }
8870  if (INFILE(_LT_MEDIATEK_PROPRIETARY_2010)) {
8871  INTERESTING("Mediatek-Proprietary-License-2010");
8872  }
8874  if (INFILE(_LT_MEDIATEK_PROPRIETARY_2016)) {
8875  INTERESTING("Mediatek-Proprietary-License-2016");
8876  }
8878  if (INFILE(_LT_MELANGE)) {
8879  INTERESTING("Melange-Public-License");
8880  }
8882  if (INFILE(_LT_MICROCHIP_ENC28J60_2009)) {
8883  INTERESTING("Microchip-ENC28J60-License-2009");
8884  }
8886  if (INFILE(_LT_MICROCHIP_LINUX_FIRMWARE)) {
8887  INTERESTING("Microchip-Linux-Firmware-License");
8888  }
8890  if (INFILE(_LT_MICROCHIP_PK2CMD_2009)) {
8891  INTERESTING("Microchip-pk2cmd-License-2009");
8892  }
8894  if (INFILE(_LT_MICROSOFT_ENTERPRISE_LIBRARY)) {
8895  INTERESTING("MS-Enterprise-Library-EULA");
8896  }
8898  if (INFILE(_LT_MINIMAX_MODEL_M2_5)) {
8899  INTERESTING("MiniMax-Model-License-M2.5");
8900  }
8902  if (INFILE(_LT_MIT_NAGY)) {
8903  INTERESTING("MIT-Nagy-Variant");
8904  }
8906  if (INFILE(_LT_MODERNE_SALA_2024)) {
8907  INTERESTING("Moderne-Source-Available-License-2024");
8908  }
8910  if (INFILE(_LT_MOE_SPEECH)) {
8911  INTERESTING("MoeSpeech-License");
8912  }
8914  if (INFILE(_LT_MOV_AI_1_0)) {
8915  INTERESTING("Mov.AI-License-version-1.0");
8916  }
8918  if (INFILE(_LT_MOXA_LINUX_FIRMWARE)) {
8919  INTERESTING("Moxa-Linux-Firmware-License");
8920  }
8922  if (INFILE(_LT_MPEG_7)) {
8923  INTERESTING("MPEG-7-License");
8924  }
8926  if (INFILE(_LT_MPEG_ISO)) {
8927  INTERESTING("MPEG-2-NBC-MPEG-4-Audio-ISO");
8928  }
8930  if (INFILE(_LT_MS_ASP_NET_AJAX_SUPPLEMENTAL)) {
8931  INTERESTING("MS-Supplemental-License-ASP.NET-2.0-AJAX-EXT");
8932  }
8934  if (INFILE(_LT_MS_AZURE_RTOS_2020_05)) {
8935  INTERESTING("MS-Azure-RTOS-2020-05");
8936  }
8938  if (INFILE(_LT_MS_AZURE_RTOS_2020_07)) {
8939  INTERESTING("MS-Azure-RTOS-2020-07");
8940  }
8942  if (INFILE(_LT_MS_AZURE_RTOS_2023_05)) {
8943  INTERESTING("MS-Azure-RTOS-2023-05");
8944  }
8946  if (INFILE(_LT_MS_CONTAINER_EULA)) {
8947  INTERESTING("Microsoft-Container-EULA");
8948  }
8950  if (INFILE(_LT_MS_DIRECT3D_D3D120N7_1_1_0)) {
8951  INTERESTING("MS-Direct3D-D3D12On7-1.1.0");
8952  }
8954  if (INFILE(_LT_MS_DXSDK_D3DX_9_29_952_3)) {
8955  INTERESTING("MS-DXSDK.D3DX-9.29.952.3");
8956  }
8958  if (INFILE(_LT_MS_ENTITY_FRAMEWORK_5)) {
8959  INTERESTING("MS-Entity-Framework-5-License");
8960  }
8962  if (INFILE(_LT_MS_IIS_CONTAINER_IMAGES_EULA)) {
8963  INTERESTING("MS-IIS-Container-Images-EULA-2020");
8964  }
8966  if (INFILE(_LT_MSJ_SAMPLE_CODE)) {
8967  INTERESTING("MS-Systems-Journal-Sample-Code-License");
8968  }
8970  if (INFILE(_LT_MS_LIMITED_COMMUNITY)) {
8971  INTERESTING("MS-Limited-Community-License");
8972  }
8974  if (INFILE(_LT_MS_NET_LIBRARY_2019_06)) {
8975  INTERESTING("MS-.NET-Library-License-2019-06");
8976  }
8978  if (INFILE(_LT_MS_OFFICE_SYSTEM_PROGRAMS_EU)) {
8979  INTERESTING("MS-Office-System-Programs-Software-EULA");
8980  }
8982  if (INFILE(_LT_MS_OPUS_PATENT_2012)) {
8983  INTERESTING("MS-Opus-Patent-Terms-2012");
8984  }
8986  if (INFILE(_LT_MS_PATENT_PROMISE)) {
8987  INTERESTING("MS-Patent-Promise-for-.NET");
8988  }
8990  if (INFILE(_LT_MS_PATENT_PROMISE_MONO)) {
8991  INTERESTING("Microsoft-Patent-Promise-for-Mono");
8992  }
8994  if (INFILE(_LT_MS_PYTHON_VSCODE_PYLANCE_202)) {
8995  INTERESTING("MS-Pylance-Extension-for-VSCode-License");
8996  }
8998  if (INFILE(_LT_MS_SSPL)) {
8999  INTERESTING("MS-SS-PL");
9000  }
9002  if (INFILE(_LT_MSTAR_2007)) {
9003  INTERESTING("MStar-Proprietary-License-2007");
9004  }
9006  if (INFILE(_LT_MSTAR_2012)) {
9007  INTERESTING("MStar-Proprietary-License-2012");
9008  }
9010  if (INFILE(_LT_MTX_LICENSING_STATEMENT)) {
9011  INTERESTING("MicroType-Express-(MTX)-License");
9012  }
9014  if (INFILE(_LT_MUT_LICENSE)) {
9015  INTERESTING("muT-License");
9016  }
9018  if (INFILE(_LT_MYSQL_LINKING_EXCEPTION_2018)) {
9019  INTERESTING("MySQL-linking-exception-2018");
9020  }
9022  if (INFILE(_LT_NAUGHTER)) {
9023  INTERESTING("Naughter-Software-License");
9024  }
9026  if (INFILE(_LT_NEMOTRON_OPEN_MODEL_2025_12_)) {
9027  INTERESTING("NVIDIA-Nemotron-Open-Model-2025-12-15");
9028  }
9030  if (INFILE(_LT_NETCOMPONENTS)) {
9031  INTERESTING("NetComponents-License");
9032  }
9034  if (INFILE(_LT_NETDATA_NCUL1)) {
9035  INTERESTING("Netdata-Cloud-UI-License-v1.0-(NCUL1)");
9036  }
9038  if (INFILE(_LT_NETRONOME_FIRMWARE)) {
9039  INTERESTING("Netronome-Firmware-License");
9040  }
9042  if (INFILE(_LT_NEW_RELIC)) {
9043  INTERESTING("New-Relic-License");
9044  }
9046  if (INFILE(_LT_NON_VIOLENT_4_0)) {
9047  INTERESTING("NVPL-4.0");
9048  }
9050  if (INFILE(_LT_NON_VIOLENT_7_0)) {
9051  INTERESTING("NVPL-7.0");
9052  }
9054  if (INFILE(_LT_NTLM)) {
9055  INTERESTING("NTLM-License");
9056  }
9058  if (INFILE(_LT_NVIDIA_APEX_SDK_EULA_2011)) {
9059  INTERESTING("NVIDIA-APEX-SDK-EULA-2011");
9060  }
9062  if (INFILE(_LT_NVIDIA_MODEL_TRAINING_2025)) {
9063  INTERESTING("NVIDIA-Data-Agreement-for-Model-Training-2025");
9064  }
9066  if (INFILE(_LT_NVIDIA_OPEN_MODEL_2025_04_28)) {
9067  INTERESTING("NVIDIA-Open-Model-License-Agreement-2025-04-28");
9068  }
9070  if (INFILE(_LT_NXP_FIRMWARE_PATENT)) {
9071  INTERESTING("NXP-Firmware-with-Patent-License");
9072  }
9074  if (INFILE(_LT_NXP_MC_FIRMWARE)) {
9075  INTERESTING("NXP-MC-Firmware-License");
9076  }
9078  if (INFILE(_LT_NXP_WARRANTY_DISCLAIMER)) {
9079  INTERESTING("NXP-Warranty-Disclaimer");
9080  }
9082  if (INFILE(_LT_NYSL_0_9982)) {
9083  INTERESTING("NYSL-0.9982");
9084  }
9086  if (INFILE(_LT_ODIN_2000)) {
9087  INTERESTING("Odin-Software-License-2000");
9088  }
9090  if (INFILE(_LT_ODMG)) {
9091  INTERESTING("ODMG-License");
9092  }
9094  if (INFILE(_LT_OGL_1_0A)) {
9095  INTERESTING("OGL-1.0a");
9096  }
9098  if (INFILE(_LT_OKNOSOFT_2021)) {
9099  INTERESTING("Oknosoft-License-2021");
9100  }
9102  if (INFILE(_LT_ON2_PATENT)) {
9103  INTERESTING("On2-VP3-Codec-Software-Patent-grant");
9104  }
9106  if (INFILE(_LT_OPENAI_TOU_20241211)) {
9107  INTERESTING("OpenAI-Terms-of-Use-20241211");
9108  }
9110  if (INFILE(_LT_OPENATOM_MODEL_1_0)) {
9111  INTERESTING("OpenAtom-Model-License-1.0");
9112  }
9114  if (INFILE(_LT_OPENVPN_AS_EULA)) {
9115  INTERESTING("OpenVPN-AS-EULA");
9116  }
9118  if (INFILE(_LT_OPEN_WEIGHTS_PERMISSIVE_1_0_)) {
9119  INTERESTING("Open-Weights-Permissive-License-v1.0.0");
9120  }
9122  if (INFILE(_LT_OPERA_EULA_2018)) {
9123  INTERESTING("Opera-EULA-2018");
9124  }
9126  if (INFILE(_LT_OPERA_EULA_EEA_2018)) {
9127  INTERESTING("Opera-EULA-EEA-2018");
9128  }
9130  if (INFILE(_LT_OPNL_1_0)) {
9131  INTERESTING("OPNL-1.0");
9132  }
9134  if (INFILE(_LT_OPNL_2_0)) {
9135  INTERESTING("OPNL-2.0");
9136  }
9138  if (INFILE(_LT_ORACLE_ENTITLEMENT_05_15)) {
9139  INTERESTING("Oracle-Entitlement-5-plus-15");
9140  }
9142  if (INFILE(_LT_ORACLE_GFTC_2023_06_12)) {
9143  INTERESTING("Oracle-GFTC-2023-06-12");
9144  }
9146  if (INFILE(_LT_ORACLE_NFTC_2021)) {
9147  INTERESTING("Oracle-NFTC-2021");
9148  }
9150  if (INFILE(_LT_ORACLE_OTN_JAVASE_2019)) {
9151  INTERESTING("OTN-for-Oracle-Java-SE-2019");
9152  }
9154  if (INFILE(_LT_ORACLE_SQL_DEVELOPER)) {
9155  INTERESTING("Oracle-SQL-Developer-License-Terms");
9156  }
9158  if (INFILE(_LT_OREILLY_NOTICE)) {
9159  INTERESTING("O'Reilly-Code-Sample-Notice");
9160  }
9162  if (INFILE(_LT_OSGI_SPEC_2_0)) {
9163  INTERESTING("OSGi-Specification-License-2.0");
9164  }
9166  if (INFILE(_LT_OS_MAINTENANCE_FEE_EULA)) {
9167  INTERESTING("Open-Source-Maintenance-Fee-EULA");
9168  }
9170  if (INFILE(_LT_OTN_DEV_DIST_2016)) {
9171  INTERESTING("OTN-License-2016");
9172  }
9174  if (INFILE(_LT_OTNLA_2016_11_30)) {
9175  INTERESTING("OTNLA-2016-11-30");
9176  }
9178  if (INFILE(_LT_OWFA_1_0_2023_05)) {
9179  INTERESTING("OWFa-1.0-Patent-and-Copyright-Grants-2023-05");
9180  }
9182  if (INFILE(_LT_OWFA_1_0)) {
9183  INTERESTING("OWFa-1.0-Patent-and-Copyright-Grants");
9184  }
9186  if (INFILE(_LT_OWFA_1_0_PATENT_ONLY)) {
9187  INTERESTING("OWFa-1.0-Patent-Only");
9188  }
9190  if (INFILE(_LT_OWF_CLA_1_0_COPYRIGHT)) {
9191  INTERESTING("OWF-CLA-1.0-Copyright");
9192  }
9194  if (INFILE(_LT_OWF_CLA_1_0_COPYRIGHT_PATENT)) {
9195  INTERESTING("OWF-CLA-1.0-Copyright-and-Patent");
9196  }
9198  if (INFILE(_LT_OXYGEN_XML_WEBHELP_EULA)) {
9199  INTERESTING("Oxygen-XML-WebHelp-EULA");
9200  }
9202  if (INFILE(_LT_PAOLO_MESSINA_2000)) {
9203  INTERESTING("Paolo-Messina-2000");
9204  }
9206  if (INFILE(_LT_PAYPAL_SDK_2013_2016)) {
9207  INTERESTING("PayPal-SDK-License-2013-2016");
9208  }
9210  if (INFILE(_LT_PDF_CREATOR_PILOT)) {
9211  INTERESTING("PDF-Creator-Pilot-License-Agreement");
9212  }
9214  if (INFILE(_LT_PD_PROGRAMMING)) {
9215  INTERESTING("PD'Programming-License");
9216  }
9218  if (INFILE(_LT_PHASER_CCP4)) {
9219  INTERESTING("Phaser-Commercial-EULA-(CCP4)");
9220  }
9222  if (INFILE(_LT_PHASER_PHENIX)) {
9223  INTERESTING("Phaser-Commercial-EULA-(Phenix)");
9224  }
9226  if (INFILE(_LT_PHILIPPE_DE_MUYTER)) {
9227  INTERESTING("Philippe-De-Muyter-License");
9228  }
9230  if (INFILE(_LT_PLANET_SOURCE_CODE)) {
9231  INTERESTING("Planet-Source-Code-License");
9232  }
9234  if (INFILE(_LT_PLASTIMATCH_1_0)) {
9235  INTERESTING("Plastimatch-1.0");
9236  }
9238  if (INFILE(_LT_PML_2020)) {
9239  INTERESTING("Amazon-PML-2020");
9240  }
9242  if (INFILE(_LT_PNGSUITE)) {
9243  INTERESTING("PngSuite-License");
9244  }
9246  if (INFILE(_LT_POWERVR_TOOLS_SOFTWARE_EULA)) {
9247  INTERESTING("PowerVR-Tools-Software-EULA");
9248  }
9250  if (INFILE(_LT_PROPRIETARY_LICENSE)) {
9251  INTERESTING("Proprietary-License");
9252  }
9254  if (INFILE(_LT_PSION_S3AEMUL)) {
9255  INTERESTING("Psion-User-LIcence-for-S3AEMUL");
9256  }
9258  if (INFILE(_LT_PSION_SIEMUL)) {
9259  INTERESTING("Psion-User-LIcence-for-SiEMUL");
9260  }
9262  if (INFILE(_LT_PSION_WRKAEMUL)) {
9263  INTERESTING("Psion-User-LIcence-for-WrkAEmul");
9264  }
9266  if (INFILE(_LT_PSYTEC_FREESOFT)) {
9267  INTERESTING("Psytec-Free-Software-License");
9268  }
9270  if (INFILE(_LT_QAPLUG)) {
9271  INTERESTING("QAPlug-License");
9272  }
9274  if (INFILE(_LT_QCA_LINUX_FIRMWARE)) {
9275  INTERESTING("QCA-Linux-Firmware-License");
9276  }
9278  if (INFILE(_LT_QCA_TECHNOLOGY)) {
9279  INTERESTING("QCA-Technology-License");
9280  }
9282  if (INFILE(_LT_QTI_LINUX_FIRMWARE)) {
9283  INTERESTING("QTI-Linux-Firmware");
9284  }
9286  if (INFILE(_LT_QUALCOMM_ISO)) {
9287  INTERESTING("Qualcomm-ISO/IEC-MPEG-B-DASH-License");
9288  }
9290  if (INFILE(_LT_QUICKNET_DOCUMENT_1999)) {
9291  INTERESTING("Quicknet-Document-License-1999");
9292  }
9294  if (INFILE(_LT_QWEN_2024)) {
9295  INTERESTING("Qwen-License-Agreement-2024");
9296  }
9298  if (INFILE(_LT_RACKSPACE)) {
9299  INTERESTING("Rackspace-License");
9300  }
9302  if (INFILE(_LT_REDIS_SOURCE_AVAILABLE_1_0)) {
9303  INTERESTING("Redis-Source-Available-License-1.0");
9304  }
9306  if (INFILE(_LT_RESPONSIBLE_AI_SOURCE_1_0)) {
9307  INTERESTING("Reponsible-AI-Source-Code-License-v1.0");
9308  }
9310  if (INFILE(_LT_RETYPE_3_7_0)) {
9311  INTERESTING("Retype-Software-License-Agreement-v3.7.0");
9312  }
9314  if (INFILE(_LT_RICHARD_BLACK)) {
9315  INTERESTING("Richard-Black-License");
9316  }
9318  if (INFILE(_LT_ROOT_CERT_3_0)) {
9319  INTERESTING("Root-Certificate-License-Agreement-v3.0");
9320  }
9322  if (INFILE(_LT_RSA_DEMO)) {
9323  INTERESTING("RSA-Demo-License");
9324  }
9326  if (INFILE(_LT_RUBYENCODER_COMMERCIAL)) {
9327  INTERESTING("RubyEncoder-Commercial-Licence");
9328  }
9330  if (INFILE(_LT_RUBYENCODER_LOADER)) {
9331  INTERESTING("RubyEncoder-Loader-Licence");
9332  }
9334  if (INFILE(_LT_SAFECOPY_EULA)) {
9335  INTERESTING("SafeCopy-EULA");
9336  }
9338  if (INFILE(_LT_SALESFORCESANS_FONT)) {
9339  INTERESTING("SalesforceSans-Font-License");
9340  }
9342  if (INFILE(_LT_SAM_2025_11_19)) {
9343  INTERESTING("SAM-License-2025-11-19");
9344  }
9346  if (INFILE(_LT_SANDEEP)) {
9347  INTERESTING("Sandeep-License");
9348  }
9350  if (INFILE(_LT_SCANLOGD_LICENSE)) {
9351  INTERESTING("scanlogd-License");
9352  }
9354  if (INFILE(_LT_SCOLA_EN)) {
9355  INTERESTING("Statistics-Canada-Open-Licence-Agreement");
9356  }
9358  if (INFILE(_LT_SCRIPT_NIKHILK)) {
9359  INTERESTING("Script#-License");
9360  }
9362  if (INFILE(_LT_SEMGREP_REGISTRY)) {
9363  INTERESTING("Semgrep-Registry-License");
9364  }
9366  if (INFILE(_LT_SEMGREP_RULES_1_0)) {
9367  INTERESTING("Semgrep-Rules-License-v.1.0");
9368  }
9370  if (INFILE(_LT_SERVICE_COMP_ARCH)) {
9371  INTERESTING("Service-Component-Architecture-License");
9372  }
9374  if (INFILE(_LT_SGI_CID_1_0)) {
9375  INTERESTING("SGI-CID-Font-Code-Public-License-1.0");
9376  }
9378  if (INFILE(_LT_SLINT_COMMERCIAL_2_0)) {
9379  INTERESTING("Slint-Commercial-License-2.0");
9380  }
9382  if (INFILE(_LT_SMARTLABS_FREEWARE)) {
9383  INTERESTING("SmartLabs-Freeware-License");
9384  }
9386  if (INFILE(_LT_SOCKETXX_2003)) {
9387  INTERESTING("Socketxx-License-2003");
9388  }
9390  if (INFILE(_LT_SOFTFLOAT_2C)) {
9391  INTERESTING("SoftFloat-Legal-Notice-2c");
9392  }
9394  if (INFILE(_LT_SPARK_JIVE)) {
9395  INTERESTING("Spark-Jive-License");
9396  }
9398  if (INFILE(_LT_SPLUNK_3PP_EULA)) {
9399  INTERESTING("Splunk-EULA-for-Third-Party-Content");
9400  }
9402  if (INFILE(_LT_SQUARE_CLA)) {
9403  INTERESTING("Square-CLA");
9404  }
9406  if (INFILE(_LT_STABILITY_AI_COMMUNITY_2024)) {
9407  INTERESTING("Stability-AI-Community-License-Agreement-2024");
9408  }
9410  if (INFILE(_LT_STMICROELECTRONICS_LINUX_FIR)) {
9411  INTERESTING("STMicroelectronics-Linux-Firmware-License");
9412  }
9414  if (INFILE(_LT_SUN_BCL_JAVA_SERVLET_IMP_2_1)) {
9415  INTERESTING("Sun-BCL-Java-Servlet-Implementation-2.1.1");
9416  }
9418  if (INFILE(_LT_SUN_BSD_EXTRA)) {
9419  INTERESTING("Sun-BSD-Style-with-Additional-Restrictions");
9420  }
9422  if (INFILE(_LT_SUN_CC_PP_1_0)) {
9423  INTERESTING("Sun-CC-PP-Processing-License-1.0");
9424  }
9426  if (INFILE(_LT_SUN_EJB_SPEC_3_0)) {
9427  INTERESTING("Sun-EJB-Specification-3.0");
9428  }
9430  if (INFILE(_LT_SUN_GLASSFISH)) {
9431  INTERESTING("Sun-GlassFish-License");
9432  }
9434  if (INFILE(_LT_SUN_JAVAMAIL)) {
9435  INTERESTING("Sun-JavaMail");
9436  }
9438  if (INFILE(_LT_SUN_JAVA_TRANSACTION_API)) {
9439  INTERESTING("Sun-Java-Transaction-API-License");
9440  }
9442  if (INFILE(_LT_SUN_JSR_SPEC_04_2006)) {
9443  INTERESTING("Sun-JSR-Specification-04-2006");
9444  }
9446  if (INFILE(_LT_SUN_JTA_SPEC_1_0_1B)) {
9447  INTERESTING("Sun-JTA-Specification-License-1.0.1B");
9448  }
9450  if (INFILE(_LT_SUN_NO_HIGH_RISK_ACTIVITIES)) {
9451  INTERESTING("Sun-No-High-Risk-Activities-License");
9452  }
9454  if (INFILE(_LT_SYNOPSYS_ATTRIBUTION)) {
9455  INTERESTING("Synopsys-Attribution-License");
9456  }
9458  if (INFILE(_LT_TALIGENT_JDK)) {
9459  INTERESTING("Taligent-JDK-Proprietary-Notice");
9460  }
9462  if (INFILE(_LT_TANUKI_MAINTENANCE)) {
9463  INTERESTING("Tanuki-Maintenance-Addendum-1.3");
9464  }
9466  if (INFILE(_LT_TENCENT_HUNYUAN_IMAGE_3_0_CL)) {
9467  INTERESTING("Tencent-Hunyuan-Image-3.0-CLA");
9468  }
9470  if (INFILE(_LT_T_ENGINE_PUBLIC)) {
9471  INTERESTING("T-Engine-Public-License");
9472  }
9474  if (INFILE(_LT_TI_BROADBAND_APPS)) {
9475  INTERESTING("TI-Broadband-Applications-License");
9476  }
9478  if (INFILE(_LT_T_LICENSE_1_0)) {
9479  INTERESTING("T-License-1.0");
9480  }
9482  if (INFILE(_LT_T_LICENSE_2_0)) {
9483  INTERESTING("T-License-2.0");
9484  }
9486  if (INFILE(_LT_T_LICENSE_2_1)) {
9487  INTERESTING("T-License-2.1");
9488  }
9490  if (INFILE(_LT_T_LICENSE_2_2)) {
9491  INTERESTING("T-License-2.2");
9492  }
9494  if (INFILE(_LT_T_LICENSE_AMP_T_KERNEL)) {
9495  INTERESTING("T-License-for-AMP-T-Kernel");
9496  }
9498  if (INFILE(_LT_T_LICENSE_AMP_TKSE)) {
9499  INTERESTING("T-License-for-AMP-TKSE");
9500  }
9502  if (INFILE(_LT_T_LICENSE_SMP_T_KERNEL)) {
9503  INTERESTING("T-License-for-SMP-T-Kernel");
9504  }
9506  if (INFILE(_LT_T_LICENSE_SMP_TKSE)) {
9507  INTERESTING("T-License-for-SMP-TKSE");
9508  }
9510  if (INFILE(_LT_T_LICENSE_TKSE)) {
9511  INTERESTING("T-License-for-TKSE");
9512  }
9514  if (INFILE(_LT_TONGYI_QIANWEN_2023)) {
9515  INTERESTING("Tongyi-Qianwen-License-Agreement-2023");
9516  }
9518  if (INFILE(_LT_TOPPERS_EDUCATIONAL)) {
9519  INTERESTING("TOPPERS-Educational");
9520  }
9522  if (INFILE(_LT_TOPPERS_LICENSE)) {
9523  INTERESTING("TOPPERS-License");
9524  }
9526  if (INFILE(_LT_TRCA_ODL_1_0)) {
9527  INTERESTING("TRCA-Open-Data-Licence-1.0");
9528  }
9530  if (INFILE(_LT_TREEVIEW_DEVELOPER)) {
9531  INTERESTING("TreeView-Developer-License");
9532  }
9534  if (INFILE(_LT_TREEVIEW_DISTRIBUTOR)) {
9535  INTERESTING("TreeView-Distributor-License");
9536  }
9538  if (INFILE(_LT_TRENDMICRO_CL_1_0)) {
9539  INTERESTING("Trend-Micro-Community-License-1.0");
9540  }
9542  if (INFILE(_LT_TRUSTONIC_PROPRIETARY_2013)) {
9543  INTERESTING("Trustonic-Proprietary-License-2013");
9544  }
9546  if (INFILE(_LT_TXL_10_5)) {
9547  INTERESTING("TXL-10.5-License");
9548  }
9550  if (INFILE(_LT_UGUI)) {
9551  INTERESTING("UGUI-License");
9552  }
9554  if (INFILE(_LT_UNLIMITED_BINARY_LINKING)) {
9555  INTERESTING("Unlimited-Binary-Linking-Exception");
9556  }
9558  if (INFILE(_LT_UNLIMITED_BINARY_USE_EXCEPTI)) {
9559  INTERESTING("Unlimited-Binary-Use-Exception");
9560  }
9562  if (INFILE(_LT_UNPUBLISHED_SOURCE)) {
9563  INTERESTING("Unpublished-Source-License");
9564  }
9566  if (INFILE(_LT_US_GOVT_GEOTRANFORM)) {
9567  INTERESTING("US-Government-GeoTransform");
9568  }
9570  if (INFILE(_LT_USROBOTICS_PERMISSIVE)) {
9571  INTERESTING("USRobotics-Permissive-License");
9572  }
9574  if (INFILE(_LT_UTAH_CSL)) {
9575  INTERESTING("Utah-CSL-License");
9576  }
9578  if (INFILE(_LT_VCALENDAR)) {
9579  INTERESTING("VCalendar-License");
9580  }
9582  if (INFILE(_LT_VERISIGN)) {
9583  INTERESTING("VeriSign-License");
9584  }
9586  if (INFILE(_LT_VICOMSOFT_SOFTWARE)) {
9587  INTERESTING("Vicomsoft-Software-License");
9588  }
9590  if (INFILE(_LT_VISUAL_NUMERICS)) {
9591  INTERESTING("Visual-Numerics-License");
9592  }
9594  if (INFILE(_LT_VITA_NUOVA_LIBERAL)) {
9595  INTERESTING("Vita-Nuova-Liberal-Source-License");
9596  }
9598  if (INFILE(_LT_VITESSE_PROP)) {
9599  INTERESTING("Vitesse-Proprietary-Notice");
9600  }
9602  if (INFILE(_LT_VPL_1_1)) {
9603  INTERESTING("VPL-1.1");
9604  }
9606  if (INFILE(_LT_VPL_1_2)) {
9607  INTERESTING("VPL-1.2");
9608  }
9610  if (INFILE(_LT_VS10X_CODE_MAP)) {
9611  INTERESTING("VS10x-Code-Map");
9612  }
9614  if (INFILE(_LT_W3C_COMMUNITY_CLA)) {
9615  INTERESTING("W3C-Community-CLA");
9616  }
9618  if (INFILE(_LT_W3C_COMMUNITY_FINAL_SPEC)) {
9619  INTERESTING("W3C-Community-Final-Specification-Agreement");
9620  }
9622  if (INFILE(_LT_WINCE_50_SHARED_SOURCE)) {
9623  INTERESTING("MS-Windows-CE-5.0-Shared-Source-License");
9624  }
9626  if (INFILE(_LT_WINIDEA_SDK_2025)) {
9627  INTERESTING("winIDEA-SDK-2025");
9628  }
9630  if (INFILE(_LT_XMOS_COMMERCIAL_2017)) {
9631  INTERESTING("XMOS-Commercial-2017");
9632  }
9634  if (INFILE(_LT_ZAPATEC_CALENDAR)) {
9635  INTERESTING("Zapatec-Calendar-License");
9636  }
9638  if (INFILE(_LT_ZEUSBENCH)) {
9639  INTERESTING("ZeusBench-notice");
9640  }
9642  if (INFILE(_LT_ZIPLIST5_GEOCODE_DUPLICATION)) {
9643  INTERESTING("ZIPList5-Geocode-Duplication-Addendum");
9644  }
9646  if (INFILE(_LT_ZVENO_RESEARCH)) {
9647  INTERESTING("Zveno-Research-License");
9648  }
9650  if (INFILE(_LT_EJ_TECHNOLOGIES_EULA)) {
9651  INTERESTING("ej-technologies-EULA");
9652  }
9654  if (INFILE(_LT_HUGO_LICENSE) && NOT_INFILE(_LT_HUGO)) {
9655  INTERESTING("Hugo-License");
9656  }
9658  if (INFILE(_LT_MOVAI_1_0)) {
9659  INTERESTING("Mov.AI-1.0");
9660  }
9662  if (INFILE(_LT_SBIA_B)) {
9663  INTERESTING("SBIA-B");
9664  }
9666  if (INFILE(_LT_YANDEXGPT_2025)) {
9667  INTERESTING("YandexGPT-5-Lite-8B-2025");
9668  }
9670  if (INFILE(_LT_ACTIVESTATE_COMMUNITY)) {
9671  INTERESTING("ActiveState-Community");
9672  }
9674  if (INFILE(_LT_CHRIS_STOY)) {
9675  INTERESTING("Chris-Stoy-Attribution");
9676  }
9678  if (INFILE(_LT_GLWTPL)) {
9679  INTERESTING("GLWTPL");
9680  }
9682  if (INFILE(_LT_RED_HAT_TRADEMARKS)) {
9683  INTERESTING("Red-Hat-Trademarks");
9684  }
9686  if (INFILE(_LT_RTOOLS_UTIL)) {
9687  INTERESTING("RTools-Util");
9688  }
9690  if (INFILE(_LT_TGC_SPEC_V2)) {
9691  INTERESTING("TCG-Spec-License-v2");
9692  }
9694  if (INFILE(_LT_TIGRA_CALENDAR_32)) {
9695  INTERESTING("Tigra-Calendar-3.2");
9696  }
9698  if (INFILE(_LT_TIM_JANIK_2003)) {
9699  INTERESTING("Tim-Janik-License-2003");
9700  }
9702  if (INFILE(_LT_ATMEL_FW_LINUX)) {
9703  INTERESTING("Atmel-linux-firmware");
9704  }
9706  if (INFILE(_LT_SCANCODE_ACK)) {
9707  INTERESTING("LicenseRef-scancode-acknowledgment");
9708  }
9710  if (INFILE(_LT_KFGQPC_UTHMANIC)) {
9711  INTERESTING("KFGQPC-Uthmanic-Script-HAFS");
9712  }
9714  if (INFILE(_LT_KICAD_LIB_EXC)) {
9715  INTERESTING("KiCad-libraries-exception");
9716  }
9718  if (INFILE(_LT_QPL_INRIA_2004)) {
9719  INTERESTING("QPL-1.0-INRIA-2004-exception");
9720  }
9722  if (INFILE(_LT_BITSTREAM_CHARTER)) {
9723  INTERESTING("Bitstream-Charter");
9724  }
9726  if (INFILE(_LT_GRAPHICS_GEMS)) {
9727  INTERESTING("Graphics-Gems");
9728  }
9730  if (INFILE(_LT_KNUTH_CTAN)) {
9731  INTERESTING("Knuth-CTAN");
9732  }
9734  if (INFILE(_LT_LAL_12)) {
9735  INTERESTING("LAL-1.2");
9736  }
9738  if (INFILE(_LT_LILIQ_P_11)) {
9739  INTERESTING("LiLiQ-P-1.1");
9740  }
9742  if (INFILE(_LT_NLPL_PROSE)) {
9743  INTERESTING("NLPL");
9744  }
9746  if (INFILE(_LT_OSC_10)) {
9747  INTERESTING("OSC-1.0");
9748  }
9750  if (INFILE(_LT_SGP4_LIC)) {
9751  INTERESTING("SGP4");
9752  }
9754  if (INFILE(_LT_SL_LIC)) {
9755  INTERESTING("SL");
9756  }
9758  if (INFILE(_LT_FMT_EXCEPTION)) {
9759  INTERESTING("fmt-exception");
9760  }
9762  if (INFILE(_LT_ADVANCED_CRYPTICS)) {
9763  INTERESTING("Advanced-Cryptics-Dictionary");
9764  }
9766  if (INFILE(_LT_CFITSIO)) {
9767  INTERESTING("CFITSIO");
9768  }
9770  if (INFILE(_LT_ELASTIC_20)) {
9771  INTERESTING("Elastic-2.0");
9772  }
9774  if (INFILE(_LT_OPENMDW_10)) {
9775  INTERESTING("OpenMDW-1.0");
9776  }
9778  if (INFILE(_LT_TPDL)) {
9779  INTERESTING("TPDL");
9780  }
9782  if (INFILE(_LT_WTFNMFPL)) {
9783  INTERESTING("WTFNMFPL");
9784  }
9786  /*
9787  * END of license-footprint checking of known patterns/strings
9788  ******
9789  * Plan-B: look for things attorneys generally believe aren't "overly
9790  * legally-binding" or "uninterestring from a license perspective':
9791  * ... notable references to commercial, non-commercial, not-for-profit,
9792  * not-an-open-source-license, etc.
9793  */
9794  if (maxInterest != IL_HIGH) {
9795  if (INFILE(_LT_COMMERCIAL_1)) {
9796  INTERESTING(lDebug ? "COMM(1)" : "COMMERCIAL");
9797  }
9798  else if (INFILE(_LT_COMMERCIAL_2)) {
9799  INTERESTING(lDebug ? "COMM(2)" : "COMMERCIAL");
9800  }
9801  else if (HASTEXT(_LT_COMMERCIAL_3, REG_EXTENDED)) {
9802  if (HASTEXT(_LT_COMMERCIAL_Intel, REG_EXTENDED)) {
9803  INTERESTING("Intel.Commercial");
9804  } else if (HASTEXT(_LT_COMMERCIAL_Broadcom, REG_EXTENDED)) {
9805  INTERESTING("Broadcom.Commercial");
9806  } else {
9807  INTERESTING(lDebug ? "COMM(3)" : "COMMERCIAL");
9808  }
9809  }
9810  else if (INFILE(_LT_COMMERCIAL_4)) {
9811  if (HASTEXT(_LT_COMMERCIAL_Android_Fraunhofer, 0)) {
9812  INTERESTING("AndroidFraunhofer.Commercial");
9813  } else {
9814  INTERESTING(lDebug ? "COMM(4)" : "COMMERCIAL");
9815  }
9816  }
9817  else if (HASTEXT(_TEXT_BOOK, 0) && INFILE(_LT_BOOKPURCHASE)) {
9818  INTERESTING(lDebug ? "PurchBook" : "COMMERCIAL");
9819  }
9820  else if (INFILE(_LT_COMMERCIAL_5)) {
9821  INTERESTING(lDebug ? "COMM(5)" : "COMMERCIAL");
9822  }
9823  else if (INFILE(_LT_COMMERCIAL_6)) {
9824  INTERESTING(lDebug ? "COMM(6)" : "COMMERCIAL");
9825  }
9826  else if (INFILE(_LT_COMMERCIAL_7)) {
9827  INTERESTING(lDebug ? "COMM(7)" : "COMMERCIAL");
9828  }
9829  if (INFILE(_LT_NONPROFIT_1)) {
9830  MEDINTEREST(lDebug ? "NonP(1)" : "Non-profit");
9831  }
9832  else if (!lmem[_mPYTH_TEXT] && HASTEXT(_TEXT_PROFIT, 0) &&
9833  INFILE(_PHR_NONPROFIT)) {
9834  if (!(lmem[_fIETF] + lmem[_fDOC])) {
9835  MEDINTEREST(lDebug ? "NonP(2)" : "Non-profit");
9836  }
9837  }
9838  if (INFILE(_PHR_NO_SALE)) {
9839  MEDINTEREST("Not-for-sale");
9840  }
9841  if (!lmem[_mALADDIN] && INFILE(_PHR_NOT_OPEN)) {
9842  MEDINTEREST("NOT-Open-Source");
9843  }
9844  if (HASKW(kwbm, _KW_patent) && INFILE(_PHR_PATENT) && NOT_INFILE(_PHR_PATENT_NOT)) {
9845  MEDINTEREST("Patent-ref");
9846  }
9847  if (INFILE(_PHR_RESTRICT_RIGHTS)) {
9848  if (INFILE(_PHR_USGOVT_RESTRICT)) {
9849  MEDINTEREST("Govt-restrict");
9850  }
9851  else {
9852  MEDINTEREST("Restricted-rights");
9853  }
9854  }
9855  if (INFILE(_LT_EXPORTS_USA)) {
9856  MEDINTEREST("US-Export-restrict");
9857  }
9858  if (pd < 0) {
9859  checkPublicDomain(filetext, size, score, kwbm, isML, isPS);
9860  }
9861  }
9862  listClear(&whereList, NO); /* again, clear "unused" matches */
9864  /*
9865  * These "minimal-reference possibilities" MUST adhere to a prescribed
9866  * format: the name to be used MUST be the first of several name to match:
9867  * "(NAME identifier|NAME license|license NAME)"
9868  *****
9869  * Furthermore, licenses should be ordered from the most-specific to the
9870  * least-specific; e.g., look for LGPL_v3 before looking for LGPL -- the
9871  * strGrep() calls below ensure reporting only more-specific license
9872  * versions if found. For instance, if you order LGPL *before* LGPL_v3
9873  * we'll get both LGPLv3 and LGPL, which is redundant AND looks stupid.
9874  */
9875  if (*licStr == NULL_CHAR && HASKW(kwbm, _KW_license)) {
9876  for (i = 0, j = _MINlicense_first; i < NMINlicense; i++, j++) {
9877  if (dbgIdxGrep(j, filetext, lDiags)) {
9878  cp = strchr(_REGEX(j), ' ');
9879  if (cp == NULL_STR) {
9880  Assert(NO, "Bad reference[1] %d", j);
9881  continue;
9882  }
9883  *cp = NULL_CHAR;
9884  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
9885  REG_ICASE)) {
9886  (void) sprintf(name, "%s-possibility",
9887  _REGEX(j)+1);
9888  LOWINTEREST(name);
9889  }
9890  *cp = ' ';
9891  }
9892  }
9893  }
9894  listClear(&whereList, NO); /* again, clear "unused" matches */
9896  if (*licStr == NULL_CHAR && HASTEXT(_TEXT_SOURCE, 0)) {
9897  for (i = 0, j = _MINsource_first; i < NMINsource; i++, j++) {
9898  if (dbgIdxGrep(j, filetext, lDiags)) {
9899  cp = strchr(_REGEX(j), ' ');
9900  if (cp == NULL_STR) {
9901  Assert(NO, "Bad reference[2] %d", j);
9902  continue;
9903  }
9904  *cp = NULL_CHAR;
9905  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
9906  REG_ICASE)) {
9907  (void) sprintf(name, "%s-possibility",
9908  _REGEX(j)+1);
9909  LOWINTEREST(name);
9910  }
9911  *cp = ' ';
9912  }
9913  }
9914  }
9915  listClear(&whereList, NO); /* again, clear "unused" matches */
9917  if (*licStr == NULL_CHAR && HASTEXT(_KW_copyright, 0)) {
9918  for (i = 0, j = _MINcpyrt_first; i < NMINcpyrt; i++, j++) {
9919  if (dbgIdxGrep(j, filetext, lDiags)) {
9920  cp = strchr(_REGEX(j), ' ');
9921  if (cp == NULL_STR) {
9922  Assert(NO, "Bad reference[2] %d", j);
9923  continue;
9924  }
9925  *cp = NULL_CHAR;
9926  if (!(*licStr) || !strGrep(_REGEX(j)+1, licStr,
9927  REG_ICASE)) {
9928  (void) sprintf(name, "%s-possibility",
9929  _REGEX(j)+1);
9930  LOWINTEREST(name);
9931  }
9932  *cp = ' ';
9933  }
9934  }
9935  }
9936  listClear(&whereList, NO); /* again, clear "unused" matches */
9938  /*
9939  * NOW look for unclassified licenses, if we haven't found anything yet.
9940  * And avoid checking .po files -- message catalogues are known to have
9941  * false-positives.
9942  *****
9943  * FIX-ME: if a file contains ONLY a "no warranty" description/clause, it
9944  * will (currently) get flagged as an UnclassifiedLicense (so the check
9945  * for no-warranty was moved ABOVE this check in case we can use that info)
9946  */
9947  if (maxInterest != IL_HIGH && !lmem[_fDOC]) {
9948  if (!pd &&
9949  checkUnclassified(filetext, size, scp->score, isML,
9950  isPS, nw)) {
9951  strcpy(name, LS_UNCL);
9952  if (isPS) {
9953  strcat(name, "(PS)");
9954  }
9955  MEDINTEREST(name);
9956  checkCornerCases(filetext, size, score, kwbm, isML, isPS, nw, YES);
9957  }
9958 #ifdef UNKNOWN_CHECK_DEBUG
9959  else {
9960  printf("... NOT an Unclassified license, NW %d PD %d\n",
9961  nw, pd);
9962  }
9963 #endif /* UNKNOWN_CHECK_DEBUG */
9964  }
9965  listClear(&whereList, NO); /* clear "unused" matches */
9967  /*
9968  * If we still haven't found anything, check for the really-low interest
9969  * items such as copyrights, and references to keywords (patent/trademark)
9970  */
9971  if (maxInterest != IL_HIGH && pd <= 0) {
9972  checkCornerCases(filetext, size, score, kwbm, isML, isPS,
9973  nw, NO);
9974  }
9975 #ifdef MEMSTATS
9976  printf("DEBUG: static lists in parseLicenses():\n");
9977  listDump(&searchList, -1);
9978  memStats("parseLicenses: pre-Free");
9979 #endif /* MEMSTATS */
9980  listClear(&searchList, NO);
9981 #ifdef MEMSTATS
9982  memStats("parseLicenses: EOP");
9983 #endif /* MEMSTATS */
9984 #ifdef LTSR_DEBUG
9985  showLTCache("LTSR-results AFTER:");
9986 #endif /* LTSR_DEBUG */
9987 #ifdef FLAG_NO_COPYRIGHT
9988  if (!SEEN(_CR_ZZZANY)) {
9989  (void) INFILE(_CR_ZZZANY);
9990  }
9991  if (!SEEN(_CR_ZZZWRONG_1)) {
9992  (void) INFILE(_CR_ZZZWRONG_1);
9993  }
9994  if (LVAL(_CR_ZZZANY)+LVAL(_CR_ZZZWRONG_1)+
9995  HASREGEX(_CR_ZZZWRONG_2, filetext) == 0) {
9996  gl.flags |= FL_NOCOPYRIGHT;
9997  }
9998 #endif /* FLAG_NO_COPYRIGHT */
9999  listClear(&whCacheList, NO);
10000  if (whereList.used) {
10001  listClear(&whereList, NO); /* may already be cleared! */
10002  }
10003  return(licStr+1); /* don't include the leading comma */
10004 }
10005 
10014 char *sisslVersion(char *filetext, int size, int isML, int isPS)
10015 {
10016  char *lstr = NULL_STR;
10017 
10018 #ifdef PROC_TRACE
10019  traceFunc("== sisslVersion()\n");
10020 #endif /* PROC_TRACE */
10021 
10022  if (INFILE(_TITLE_SISSL_V11)) {
10023  lstr = "SISSL-1.1";
10024  }
10025  else if (INFILE(_TITLE_SISSL_V12)) {
10026  lstr = "SISSL-1.2";
10027  } else {
10028  lstr = "SISSL";
10029  }
10030  return lstr;
10031 }
10032 
10041 char *aslVersion(char *filetext, int size, int isML, int isPS)
10042 {
10043  char *lstr = NULL_STR;
10044 
10045 #ifdef PROC_TRACE
10046  traceFunc("== aslVersion()\n");
10047 #endif /* PROC_TRACE */
10048 
10049  /*
10050  * Exclude first non-Apache licenses
10051  */
10052  if (INFILE(_TITLE_PHORUM) || INFILE(_CR_PHORUM)) {
10053  lstr = "Phorum";
10054  lmem[_mAPACHE] = 1;
10055  }
10056  else if (INFILE(_CR_IMAGEMAGICK)) {
10057  lstr = "ImageMagick(Apache)";
10058  lmem[_mAPACHE] = 1;
10059  }
10060  /*
10061  * Apache-2.0 cases
10062  */
10063  else if (INFILE(_SPDX_Apache_20)) {
10064  lstr = (lDebug ? "Apache-2.0(SPDX)" : "Apache-2.0");
10065  lmem[_mAPACHE] = 1;
10066  }
10067  else if (INFILE(_TITLE_Apache_20)) {
10068  lstr = (lDebug ? "Apache-2(f)" : "Apache-2.0");
10069  lmem[_mAPACHE] = 1;
10070  }
10071  else if (INFILE(_PHR_Apache_20_ref1) || INFILE(_PHR_Apache_20_ref2) || INFILE(_PHR_Apache_20_ref3))
10072  {
10073  lstr = (lDebug ? "PHR_Apache_20_ref(1-5)" : "Apache-2.0");
10074  lmem[_mAPACHE] = 1;
10075  }
10076  else if (URL_INFILE(_URL_Apache_20)) {
10077  lstr = (lDebug ? "Apache-2.0(u)" : "Apache-2.0");
10078  lmem[_mAPACHE] = 1;
10079  }
10080  else if (INFILE(_LT_Apache_20) && NOT_INFILE(_TITLE_Flora_V10) && NOT_INFILE(_TITLE_Flora_V11) && !URL_INFILE(_URL_Flora))
10081  {
10082  lstr = (lDebug ? "Apache(2.0#2)" : "Apache-2.0");
10083  lmem[_mAPACHE] = 1;
10084  }
10085  else if (INFILE(_PHR_Apache_20_ref4) || INFILE(_PHR_Apache_20_ref5) || INFILE(_PHR_Apache_20_ref6) || INFILE(_PHR_Apache_20_ref7)) {
10086  lstr = (lDebug ? "Apache(2.0#3)" : "Apache-2.0");
10087  lmem[_mAPACHE] = 1;
10088  }
10089  else if (INFILE(_TITLE_Apache_20)) {
10090  lstr = (lDebug ? "Apache(2.0#4)" : "Apache-2.0");
10091  lmem[_mAPACHE] = 1;
10092  }
10093  else if (URL_INFILE(_URL_Apache_20_1)) {
10094  lstr = (lDebug ? "Apache2(url#1)" : "Apache-2.0");
10095  lmem[_mAPACHE] = 1;
10096  }
10097  else if (URL_INFILE(_URL_Apache_20_2)) {
10098  lstr = (lDebug ? "Apache2(url#2)" : "Apache-2.0");
10099  lmem[_mAPACHE] = 1;
10100  }
10101  /*
10102  * Apache-1.1 cases
10103  */
10104  else if (INFILE(_SPDX_Apache_11)) {
10105  lstr = (lDebug ? "Apache-1.1(SPDX)" : "Apache-1.1");
10106  lmem[_mAPACHE11] = 1;
10107  }
10108  else if (INFILE(_TITLE_Apache_11)) {
10109  lstr = (lDebug ? "Apache-1.1(f)" : "Apache-1.1");
10110  lmem[_mAPACHE11] = 1;
10111  }
10112  else if (URL_INFILE(_URL_Apache_11)) {
10113  lstr = (lDebug ? "Apache-1.1(u)" : "Apache-1.1");
10114  lmem[_mAPACHE11] = 1;
10115  }
10116  else if (INFILE(_LT_Apache_11_CLAUSE_3) && INFILE(_LT_Apache_11_CLAUSE_4) && INFILE(_LT_Apache_11_CLAUSE_5)) {
10117  lstr = (lDebug ? "Apache-1.1(clauses)" : "Apache-1.1");
10118  lmem[_mAPACHE11] = 1;
10119  }
10120  else if (INFILE(_PHR_Apache_11_ref1)) {
10121  lstr = (lDebug ? "Apache(1.1#phr)" : "Apache-1.1");
10122  lmem[_mAPACHE11] = 1;
10123  }
10124  /*
10125  * Apache-1.0 cases
10126  */
10127  else if (INFILE(_SPDX_Apache_10)) {
10128  lstr = (lDebug ? "Apache-1.0(SPDX)" : "Apache-1.0");
10129  lmem[_mAPACHE10] = 1;
10130  }
10131  else if (INFILE(_PHR_Apache_ref2)) {
10132  lstr = (lDebug ? "Apache-1.0(f)" : "Apache-1.0");
10133  lmem[_mAPACHE10] = 1;
10134  }
10135  else if (INFILE(_LT_Apache_10_CLAUSE_4)) {
10136  lstr = (lDebug ? "Apache-1.0(g)" : "Apache-1.0");
10137  lmem[_mAPACHE10] = 1;
10138  }
10139  else if (URL_INFILE(_URL_Apache_10)) {
10140  lstr = (lDebug ? "Apache-1.0(u)" : "Apache-v1.0");
10141  lmem[_mAPACHE10] = 1;
10142  }
10143  /*
10144  * BSD-style cases
10145  */
10146  else if (INFILE(_LT_BSD_1)) {
10147  if (INFILE(_CR_APACHE) || INFILE(_TITLE_Apache)) {
10148  if (INFILE(_PHR_Apache_20_ref6)) {
10149  lstr = (lDebug ? "Apache-20_ref6" : "Apache-2.0");
10150  lmem[_mAPACHE] = 1;
10151  }
10152  else if (INFILE(_PHR_Apache_11_ref2)) {
10153  lstr = (lDebug ? "Apache(1.1#2)" : "Apache-1.1");
10154  lmem[_mAPACHE11] = 1;
10155  }
10156  else if ((INFILE(_PHR_Apache_ref2) || INFILE(_LT_Apache_10_CLAUSE_4))) {
10157  lstr = (lDebug ? "Apache(1.0#2)" : "Apache-1.0");
10158  lmem[_mAPACHE10] = 1;
10159  }
10160  else {
10161  lstr = (lDebug ? "Apache(title)" : "Apache");
10162  lmem[_mAPACHE] = 1;
10163  }
10164  }
10165  }
10166  /*
10167  * Apache without versions
10168  */
10169  else if (!lmem[_fREAL] && INFILE(_SPDX_Apache)) {
10170  lstr = (lDebug ? "Apache(SPDX)" : "Apache");
10171  lmem[_mAPACHE] = 1;
10172  }
10173  else if (INFILE(_PHR_Apache_ref1)) {
10174  INTERESTING(lDebug ? "Apache(ref#1)" : "Apache");
10175  lmem[_mAPACHE] = 1;
10176  }
10177  else if (INFILE(_PHR_Apache_ref4)) {
10178  lstr = (lDebug ? "Apache(ref#3)" : "Apache");
10179  lmem[_mAPACHE] = 1;
10180  }
10181  else if (INFILE(_PHR_Apache_ref3)) {
10182  lstr = (lDebug ? "Apache(ref#4)" : "Apache");
10183  lmem[_mAPACHE] = 1;
10184  }
10185  else if (URL_INFILE(_URL_Apache_1)) {
10186  lstr = (lDebug ? "Apache(url#1)" : "Apache");
10187  lmem[_mAPACHE] = 1;
10188  }
10189  else if (URL_INFILE(_URL_Apache_2)) {
10190  lstr = (lDebug ? "Apache(url#2)" : "Apache");
10191  lmem[_mAPACHE] = 1;
10192  }
10193  else if (INFILE(_PHR_Apache_ref6)) {
10194  lstr = (lDebug ? "Apache(ref#6)" : "Apache");
10195  lmem[_mAPACHE] = 1;
10196  }
10197  /*
10198  * _LT_Apache_1 and _2 cannot be identified in any Apache license
10199  * versions. They have been defined in very early nomos versions. They
10200  * are kept here, although, there are no special test cases for them.
10201  */
10202  else if (INFILE(_LT_Apache_1)) {
10203  lstr = (lDebug ? "Apache(1)" : "Apache");
10204  lmem[_mAPACHE] = 1;
10205  }
10206  else if (INFILE(_LT_Apache_2)) {
10207  lstr = (lDebug ? "Apache(2)" : "Apache");
10208  lmem[_mAPACHE] = 1;
10209  }
10210  else if (INFILE(_LT_APACHESTYLEref)) {
10211  lstr = ("Apache-style");
10212  lmem[_mAPACHE] = 1;
10213  }
10214  return lstr;
10215 }
10216 
10225 char *mplNplVersion(char *filetext, int size, int isML, int isPS)
10226 {
10227  char *lstr = NULL_STR;
10228 
10229 #ifdef PROC_TRACE
10230  traceFunc("== mplNplVersion()\n");
10231 #endif /* PROC_TRACE */
10232 
10233  if (INFILE(_TITLE_MPL11_OR_LATER)) {
10234  lstr = "MPL-1.1+";
10235  }
10236  else if (INFILE(_LT_MPL11_ref)) {
10237  lstr = "MPL-1.1";
10238  }
10239  else if (INFILE(_TITLE_NPL11_MPL)) {
10240  lstr = "NPL-1.1";
10241  }
10242  else if (INFILE(_TITLE_MPL11) && INFILE(_TITLE_MPL_style)) {
10243  lstr = "MPL-1.1-style";
10244  }
10245  else if (INFILE(_TITLE_SUGARCRM_PL)) {
10246  lstr = "SugarCRM-1.1.3";
10247  lmem[_mMPL] = 1;
10248  lmem[_fATTRIB] = 1;
10249  }
10250  else if (INFILE(_TITLE_MPL11) && !HASTEXT(_LT_NP_AME, REG_EXTENDED)) {
10251  lstr = "MPL-1.1";
10252  }
10253  else if (INFILE(_TITLE_MPL20_EXCEPTION)) {
10254  lstr = "MPL-2.0-no-copyleft-exception";
10255  }
10256  else if (INFILE(_TITLE_MPL20) || URL_INFILE(_URL_MPL20) || HASTEXT(_LT_MPL20_ref, REG_EXTENDED)) {
10257  lstr = "MPL-2.0";
10258  }
10259  else if (INFILE(_TITLE_MPL10) && INFILE(_TITLE_ERLPL)) {
10260  lstr = "ErlPL-1.1";
10261  }
10262  else if (INFILE(_TITLE_MPL10)) {
10263  lstr = "MPL-1.0";
10264  }
10265  else if (INFILE(_TITLE_MPL_EULA_30)) {
10266  lstr = "MPL-EULA-3.0";
10267  }
10268  else if (INFILE(_TITLE_MPL_EULA_20)) {
10269  lstr = "MPL-EULA-2.0";
10270  }
10271  else if (INFILE(_TITLE_MPL_EULA_11)) {
10272  lstr = "MPL-EULA-1.1";
10273  }
10274  else if (URL_INFILE(_URL_NPL10)) {
10275  lstr = (lDebug ? "NPL1.0(url)" : "NPL-1.0");
10276  }
10277  else if (URL_INFILE(_URL_NPL11)) {
10278  lstr = (lDebug ? "NPL1.1(url)" : "NPL-1.1");
10279  }
10280  else if (URL_INFILE(_URL_MPL10)) {
10281  lstr = (lDebug ? "MPL1.0(url)" : "MPL-1.0");
10282  }
10283  else if (URL_INFILE(_URL_MPL11)) {
10284  lstr = (lDebug ? "MPL1.1(url)" : "MPL-1.1");
10285  }
10286  else if (INFILE(_FILE_MPL10)) {
10287  lstr = (lDebug ? "MPL1.0(file)" : "MPL-1.0");
10288  }
10289  else if (INFILE(_FILE_MPL11)) {
10290  lstr = (lDebug ? "MPL1.1(file)" : "MPL-1.1");
10291  }
10292  else if (INFILE(_TITLE_NPL11_OR_LATER)) {
10293  lstr = "NPL-1.1+";
10294  }
10295  else if (INFILE(_TITLE_NPL11)) {
10296  lstr = "NPL-1.1";
10297  }
10298  else if (INFILE(_TITLE_NPL10)) {
10299  lstr = "NPL-1.0";
10300  }
10301  else if (URL_INFILE(_URL_NPL)) {
10302  lstr = (lDebug ? "NPL(url)" : "NPL");
10303  }
10304  else if (INFILE(_SPDX_MPL_10)) {
10305  lstr = "MPL-1.0";
10306  }
10307  else if (INFILE(_SPDX_MPL_11)) {
10308  lstr = "MPL-1.1";
10309  }
10310  else if (INFILE(_SPDX_MPL_20_no_copyleft_exception)) {
10311  lstr = "MPL-2.0-no-copyleft-exception";
10312  }
10313  else if (INFILE(_SPDX_MPL_20)) {
10314  lstr = "MPL-2.0";
10315  }
10316  else if (URL_INFILE(_URL_MPL_LATEST)) {
10317  lstr = (lDebug ? "MPL(latest)" : "MPL");
10318  }
10319  else if (URL_INFILE(_URL_MPL)) {
10320  lstr = (lDebug ? "MPL(url)" : "MPL");
10321  }
10322  else if (INFILE(_TITLE_NPL)) {
10323  lstr = "NPL";
10324  }
10325  else if (INFILE(_TITLE_MPL)) {
10326  lstr = "MPL";
10327  }
10328  else {
10329  lstr = (lDebug ? "MPL(last)" : "MPL");
10330  }
10331  return lstr;
10332 }
10333 
10342 char *realVersion(char *filetext, int size, int isML, int isPS, int ref)
10343 {
10344  char *lstr = NULL_STR;
10345 
10346 #ifdef PROC_TRACE
10347  traceFunc("== realVersion()\n");
10348 #endif /* PROC_TRACE */
10349 
10350  if (ref == _TITLE_RPSL) {
10351  if (INFILE(_TITLE_RPSL_V30)) {
10352  lstr = "RPSL-3.0";
10353  }
10354  else if (INFILE(_TITLE_RPSL_V20)) {
10355  lstr = "RPSL-2.0";
10356  }
10357  else if (INFILE(_TITLE_RPSL_V10)) {
10358  lstr = "RPSL-1.0";
10359  }
10360  else if (INFILE(_TITLE_RPSL)) {
10361  lstr = "RPSL";
10362  }
10363  }
10364  else if (ref == _TITLE_RCSL) {
10365  if (INFILE(_TITLE_RCSL_V30)) {
10366  lstr = "RCSL-3.0";
10367  }
10368  else if (INFILE(_TITLE_RCSL_V20)) {
10369  lstr = "RCSL-2.0";
10370  }
10371  else if (INFILE(_TITLE_RCSL_V10)) {
10372  lstr = "RCSL-1.0";
10373  }
10374  else if (INFILE(_TITLE_RCSL)) {
10375  lstr = "RCSL";
10376  }
10377  }
10378  else {
10379  lstr = "RealNetworks-Unknown";
10380  }
10381  return lstr;
10382 }
10383 
10392 char *pythonVersion(char *filetext, int size, int isML, int isPS)
10393 {
10394  char *lstr = NULL_STR;
10395 
10396 #ifdef PROC_TRACE
10397  traceFunc("== pythonVersion()\n");
10398 #endif /* PROC_TRACE */
10399 
10400  if (INFILE(_TITLE_PYTHON201)) {
10401  lstr = "Python-2.0.1";
10402  }
10403  else if (INFILE(_TITLE_PYTHON202)) {
10404  lstr = "Python-2.0.2";
10405  }
10406  else if (INFILE(_TITLE_PYTHON211)) {
10407  lstr = "Python-2.1.1";
10408  }
10409  else if (INFILE(_TITLE_PYTHON213)) {
10410  lstr = "Python-2.1.3";
10411  }
10412  else if (INFILE(_TITLE_PYTHON223)) {
10413  lstr = "Python-2.2.3";
10414  }
10415  else if (INFILE(_TITLE_PYTHON227)) {
10416  lstr = "Python-2.2.7";
10417  }
10418  else if (INFILE(_TITLE_PYTHON237)) {
10419  lstr = "Python-2.3.7";
10420  }
10421  else if (INFILE(_TITLE_PYTHON244)) {
10422  lstr = "Python-2.4.4";
10423  }
10424  else if (INFILE(_TITLE_PYTHON22)) {
10425  lstr = "Python-2.2";
10426  }
10427  else if (INFILE(_TITLE_PYTHON23)) {
10428  lstr = "Python-2.3";
10429  }
10430  else if (INFILE(_TITLE_PYTHON_20_1) || INFILE(_TITLE_PYTHON_20_2)) {
10431  lstr = "Python-2.0";
10432  }
10433  else {
10434  lstr = "Python";
10435  }
10436  return lstr;
10437 }
10438 
10447 char *aflVersion(char *filetext, int size, int isML, int isPS)
10448 {
10449  char *lstr = NULL_STR;
10450 
10451 #ifdef PROC_TRACE
10452  traceFunc("== aflVersion()\n");
10453 #endif /* PROC_TRACE */
10454 
10455  if (INFILE(_TITLE_AFL30)) {
10456  lstr = lDebug? "AFL(v3.0#1)" : "AFL-3.0";
10457  }
10458  else if (INFILE(_TITLE_AFL21)) {
10459  lstr = lDebug? "AFL(v2.1#1)" : "AFL-2.1";
10460  }
10461  else if (INFILE(_TITLE_AFL20)) {
10462  lstr = lDebug? "AFL(v2.0#1)" : "AFL-2.0";
10463  }
10464  else if (INFILE(_TITLE_AFL12)) {
10465  lstr = lDebug? "AFL(v1.2#1)" : "AFL-1.2";
10466  }
10467  else if (INFILE(_TITLE_AFL11)) {
10468  lstr = lDebug? "AFL(v1.1#1)" : "AFL-1.1";
10469  }
10470  else if (INFILE(_TITLE_AFL10)) {
10471  lstr = lDebug? "AFL(v1.0#1)" : "AFL-1.0";
10472  }
10473  else {
10474  lstr = "AFL";
10475  }
10476  return lstr;
10477 }
10478 
10487 char *oslVersion(char *filetext, int size, int isML, int isPS)
10488 {
10489  char *lstr = NULL_STR;
10490  /* */
10491 #ifdef PROC_TRACE
10492  traceFunc("== oslVersion()\n");
10493 #endif /* PROC_TRACE */
10494  /* */
10495  if (INFILE(_TITLE_NON_PROFIT_OSL30)) {
10496  lstr = "NPOSL-3.0";
10497  }
10498  else if (INFILE(_TITLE_OSL30)) {
10499  lstr = lDebug? "OSL(v3.0#1)" : "OSL-3.0";
10500  }
10501  else if (INFILE(_TITLE_OSL21)) {
10502  lstr = lDebug? "OSL(v2.1#1)" : "OSL-2.1";
10503  }
10504  else if (INFILE(_TITLE_OSL20)) {
10505  lstr = lDebug? "OSL(v2.0#1)" : "OSL-2.0";
10506  }
10507  else if (INFILE(_TITLE_OSL11)) {
10508  lstr = lDebug? "OSL(v1.1#1)" : "OSL-1.1";
10509  }
10510  else if (INFILE(_TITLE_OSL10)) {
10511  lstr = lDebug? "OSL(v1.0#1)" : "OSL-1.0";
10512  }
10513  else {
10514  lstr = "OSL";
10515  }
10516  return lstr;
10517 }
10518 
10527 char *cddlVersion(char *filetext, int size, int isML, int isPS)
10528 {
10529  char *lstr = NULL_STR;
10530  /* */
10531 #ifdef PROC_TRACE
10532  traceFunc("== cddlVersion()\n");
10533 #endif /* PROC_TRACE */
10534  /* */
10535  if (INFILE(_TITLE_CDDL_10)) {
10536  lstr = "CDDL-1.0";
10537  }
10538  else if (INFILE(_SPDX_CDDL_10)) {
10539  INTERESTING("CDDL-1.0");
10540  }
10541  else if (URL_INFILE(_URL_CDDL_10)) {
10542  lstr = "CDDL-1.0";
10543  }
10544  else if (INFILE(_TITLE_CDDL_11)) {
10545  lstr = "CDDL-1.1";
10546  }
10547  else if (INFILE(_SPDX_CDDL_11)) {
10548  INTERESTING("CDDL-1.1");
10549  }
10550  else if (URL_INFILE(_URL_CDDL)) {
10551  lstr = "CDDL";
10552  }
10553  else {
10554  lstr = "CDDL";
10555  }
10556  return lstr;
10557 }
10558 
10567 char *lpplVersion(char *filetext, int size, int isML, int isPS)
10568 {
10569  char *lstr = NULL_STR;
10570  /* */
10571 #ifdef PROC_TRACE
10572  traceFunc("== lpplVersion()\n");
10573 #endif /* PROC_TRACE */
10574  /* */
10575  if (INFILE(_PHR_LATEX_PL13A_OR_LATER_1) ||
10576  INFILE(_PHR_LATEX_PL13A_OR_LATER_2)) {
10577  if (INFILE(_LT_LATEX_PREAMBLE)) {
10578  lstr = lDebug ? "LPPL-v1.3a(#1)" : "LPPL-1.3a";
10579  }
10580  else {
10581  lstr = "LPPL-1.3a+";
10582  }
10583  }
10584  else if (INFILE(_TITLE_LATEX_PL13A) || INFILE(_PHR_LATEX_PL13A)) {
10585  lstr = lDebug ? "LPPL-v1.3a(#2)" : "LPPL-1.3a";
10586  }
10587  else if (INFILE(_PHR_LATEX_PL13B_OR_LATER_1) ||
10588  INFILE(_PHR_LATEX_PL13B_OR_LATER_2)) {
10589  if (INFILE(_LT_LATEX_PREAMBLE)) {
10590  lstr = lDebug ? "LPPL-v1.3b(#1)" : "LPPL-1.3b";
10591  }
10592  else {
10593  lstr = "LPPL-1.3b+";
10594  }
10595  }
10596  else if (INFILE(_TITLE_LATEX_PL13B) || INFILE(_PHR_LATEX_PL13B)) {
10597  lstr = lDebug ? "LPPL-v1.3b(#2)" : "LPPL-1.3b";
10598  }
10599  else if (INFILE(_PHR_LATEX_PL13C_OR_LATER_1) ||
10600  INFILE(_PHR_LATEX_PL13C_OR_LATER_2)) {
10601  if (INFILE(_LT_LATEX_PREAMBLE)) {
10602  lstr = lDebug ? "LPPL-v1.3c(#1)" : "LPPL-1.3c";
10603  }
10604  else {
10605  lstr = "LPPL-1.3c+";
10606  }
10607  }
10608  else if (INFILE(_TITLE_LATEX_PL13C) || INFILE(_PHR_LATEX_PL13C)) {
10609  lstr = lDebug ? "LPPL-v1.3c(#2)" : "LPPL-1.3c";
10610  }
10611  else if (INFILE(_PHR_LATEX_PL13_OR_LATER_1) ||
10612  INFILE(_PHR_LATEX_PL13_OR_LATER_2)) {
10613  if (INFILE(_LT_LATEX_PREAMBLE)) {
10614  lstr = lDebug ? "LPPL-v1.3(#1)" : "LPPL-1.3";
10615  }
10616  else {
10617  lstr = "LPPL-1.3+";
10618  }
10619  }
10620  else if (INFILE(_TITLE_LATEX_PL13) || INFILE(_PHR_LATEX_PL13)) {
10621  lstr = lDebug ? "LPPL-v1.3(#2)" : "LPPL-1.3";
10622  }
10623  else if (INFILE(_PHR_LATEX_PL12_OR_LATER_1) ||
10624  INFILE(_PHR_LATEX_PL12_OR_LATER_2)) {
10625  if (INFILE(_LT_LATEX_PREAMBLE)) {
10626  lstr = lDebug ? "LPPL-v1.2(#1)" : "LPPL-1.2";
10627  }
10628  else {
10629  lstr = "LPPL-1.2+";
10630  }
10631  }
10632  else if (INFILE(_TITLE_LATEX_PL12) || INFILE(_PHR_LATEX_PL12)) {
10633  lstr = lDebug ? "LPPL-v1.2(#2)" : "LPPL-1.2";
10634  }
10635  else if (INFILE(_PHR_LATEX_PL11_OR_LATER_1) ||
10636  INFILE(_PHR_LATEX_PL11_OR_LATER_2)) {
10637  if (INFILE(_LT_LATEX_PREAMBLE)) {
10638  lstr = lDebug ? "LPPL-v1.1(#1)" : "LPPL-1.1";
10639  }
10640  else {
10641  lstr = "LPPL-1.1+";
10642  }
10643  }
10644  else if (INFILE(_TITLE_LATEX_PL11) || INFILE(_PHR_LATEX_PL11)) {
10645  lstr = lDebug ? "LPPL-v1.1(#2)" : "LPPL-1.1";
10646  }
10647  else if (INFILE(_PHR_LATEX_PL10_OR_LATER_1) ||
10648  INFILE(_PHR_LATEX_PL10_OR_LATER_2)) {
10649  if (INFILE(_LT_LATEX_PREAMBLE)) {
10650  lstr = lDebug ? "LPPL-v1.0(#1)" : "LPPL-1.0";
10651  }
10652  else {
10653  lstr = "LPPL-1.0+";
10654  }
10655  }
10656  else if (INFILE(_TITLE_LATEX_PL10) || INFILE(_PHR_LATEX_PL10)) {
10657  lstr = lDebug ? "LPPL-v1.0(#2)" : "LPPL-1.0";
10658  }
10659  else {
10660  lstr = "LPPL";
10661  }
10662  return lstr;
10663 }
10664 
10673 char *agplVersion(char *filetext, int size, int isML, int isPS)
10674 {
10675  char *lstr = NULL_STR;
10676  /* */
10677 #ifdef PROC_TRACE
10678  traceFunc("== agplVersion()\n");
10679 #endif /* PROC_TRACE */
10680  /* */
10681  /*
10682  * Look for version 1 BEFORE version 3; the text of version 1 license says
10683  * you can also license it under GPL version 3... same reasoning goes with
10684  * the actual v3 license (vs the reference).
10685  */
10686  if (INFILE(_PHR_AGPL_10_or_later)
10687  || INFILE(_TITLE_AGPL_10_or_later)
10688  || INFILE(_SPDX_AGPL_10_or_later)
10689  || HASTEXT(_SPDX_AGPL_10plus, REG_EXTENDED)
10690  || HASTEXT(_PHR_AGPL_10plus, REG_EXTENDED))
10691  {
10692  lstr = "AGPL-1.0-or-later";
10693  }
10694  else if (INFILE(_PHR_FSF_V1_ONLY)
10695  || INFILE(_TITLE_AGPL_10_only)
10696  || INFILE(_SPDX_AGPL_10))
10697  {
10698  lstr = "AGPL-1.0-only";
10699  }
10700  else if (INFILE(_PHR_AGPL_30_or_later)
10701  || INFILE(_TITLE_AGPL_30_or_later_ref1)
10702  || INFILE(_TITLE_AGPL_30_or_later)
10703  || INFILE(_SPDX_AGPL_30_or_later)
10704  || HASTEXT(_SPDX_AGPL_30plus, REG_EXTENDED)
10705  || HASTEXT(_PHR_AGPL_30plus, REG_EXTENDED))
10706  {
10707  if (INFILE(_LT_AGPL_30)) {
10708  lstr = lDebug ? "Affero-v3(#1)" : "AGPL-3.0-only";
10709  }
10710  else {
10711  lstr = "AGPL-3.0-or-later";
10712  }
10713  }
10714  else if (HASTEXT(_PHR_AGPL_30_1, REG_EXTENDED) || INFILE(_SPDX_AGPL_30)) {
10715  lstr = "AGPL-3.0-only";
10716  }
10717  else if (GPL_INFILE(_PHR_FSF_V3_ONLY)) {
10718  if (INFILE(_TITLE_GPL3)) {
10719  lstr = lDebug ? "GPLv3(Affero#1)" : "GPL-3.0-only";
10720  }
10721  else if (INFILE(_LT_GPL3ref3)){
10722  lstr = lDebug ? "GPLv3(special)" : "GPL-3.0-only";
10723  }
10724  else {
10725  lstr = lDebug ? "Affero-v3(#2)" : "AGPL-3.0-only";
10726  }
10727  }
10728  else if (INFILE(_TITLE_AGPL_30_only)) {
10729  lstr = lDebug ? "Affero-v3(#3)" : "AGPL-3.0-only";
10730  }
10731  else if (INFILE(_TITLE_GPL3)) {
10732  lstr = lDebug ? "GPLv3(Affero#2)" : "GPL-3.0-only";
10733  }
10734  else if (URL_INFILE(_URL_AGPL3)) {
10735  lstr = lDebug ? "Affero-v3(url)" : "AGPL-3.0-only";
10736  }
10737  else {
10738  lstr = "AGPL";
10739  }
10740  return lstr;
10741 }
10742 
10751 char *gfdlVersion(char *filetext, int size, int isML, int isPS)
10752 {
10753  char *lstr = NULL_STR;
10754  /* */
10755 #ifdef PROC_TRACE
10756  traceFunc("== gfdlVersion()\n");
10757 #endif /* PROC_TRACE */
10758  /* */
10759  /*
10760  * Have to be careful here; the text of the 1.2 license says it's licensed
10761  * under 1.1 or later - have to be careful what we're looking for, and in a
10762  * specific order
10763  */
10764  if (INFILE(_TITLE_GFDL_V13_FULL_LICENSE)) {
10765  lstr = "GFDL-1.3";
10766  /* Full GFDL-1.3 license text has a reference to Creative Commons */
10767  if (HASTEXT(_LT_CC_ref, REG_EXTENDED)) {
10768  lmem[_fCCBY] = 1;
10769  }
10770  }
10771  else if (INFILE(_TITLE_GFDL_V13_OR_LATER)) {
10772  lstr = "GFDL-1.3-or-later";
10773  }
10774  else if (INFILE(_TITLE_GFDL_V13_ONLY)) {
10775  lstr = lDebug ? "GFDL-1.3(#1)" : "GFDL-1.3";
10776  }
10777  else if (INFILE(_TITLE_GFDL_V12_FULL_LICENSE)) {
10778  lstr = lDebug ? "GFDL-1.2-only(#1)" : "GFDL-1.2-only";
10779  }
10780  else if (INFILE(_PHR_FSF_V12_OR_LATER) ||
10781  INFILE(_TITLE_GFDL_V12_OR_LATER)) {
10782  lstr = "GFDL-1.2-or-later";
10783  }
10784  else if (INFILE(_TITLE_GFDL_V12_ONLY)) {
10785  lstr = lDebug ? "GFDL-1.2-only(#1)" : "GFDL-1.2-only";
10786  }
10787  else if (INFILE(_TITLE_GFDL_V11_FULL_LICENSE)) {
10788  lstr = lDebug ? "GFDL-1.1-only(#1)" : "GFDL-1.1-only";
10789  }
10790  else if (INFILE(_PHR_FSF_V11_OR_LATER) ||
10791  INFILE(_TITLE_GFDL_V11_OR_LATER)) {
10792  lstr = "GFDL-1.1-or-later";
10793  }
10794  else if (INFILE(_TITLE_GFDL_V11_ONLY)) {
10795  lstr = lDebug ? "GFDL-1.1-only(#1)" : "GFDL-1.1-only";
10796  }
10797  else if (INFILE(_PHR_FSF_V12_ONLY)) {
10798  lstr = lDebug ? "GFDL-1.2-only(#2)" : "GFDL-1.2-only";
10799  }
10800  else if (INFILE(_PHR_FSF_V11_ONLY)) {
10801  lstr = lDebug ? "GFDL-1.1-only(#2)" : "GFDL-1.1-only";
10802  }
10803  else {
10804  lstr = "GFDL";
10805  }
10806  return lstr;
10807 }
10808 
10817 char *lgplVersion(char *filetext, int size, int isML, int isPS)
10818 {
10819  char *lstr = NULL_STR;
10820  /* */
10821 #ifdef PROC_TRACE
10822  traceFunc("== lgplVersion()\n");
10823 #endif /* PROC_TRACE */
10824  /* */
10825  if ((INFILE(_PHR_LGPL21_OR_LATER_1)
10826  || INFILE(_PHR_LGPL21_OR_LATER_2)
10827  || HASTEXT(_PHR_LGPL21_OR_LATER_3, REG_EXTENDED)
10828  || HASTEXT(_PHR_LGPL21_OR_LATER_4, REG_EXTENDED))
10829  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
10830  {
10831  if (INFILE(_TITLE_LGPL_KDE)) {
10832  lstr = "LGPL-2.1-or-later-KDE-exception";
10833  }
10834  else {
10835  lstr = "LGPL-2.1-or-later";
10836  }
10837  }
10838  else if ((INFILE(_PHR_LGPL3_OR_LATER)
10839  || INFILE(_PHR_LGPL3_OR_LATER_ref1)
10840  || INFILE(_PHR_LGPL3_OR_LATER_ref2)
10841  || HASTEXT(_PHR_LGPL3_OR_LATER_ref3, REG_EXTENDED)
10842  || HASTEXT(_SPDX_LGPL_30plus, REG_EXTENDED)
10843  || HASTEXT(_PHR_LGPL_30plus, REG_EXTENDED))
10844  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
10845  {
10846  lstr = "LGPL-3.0-or-later";
10847  }
10848  else if (INFILE(_LT_LGPL3ref) && NOT_INFILE(_PHR_NOT_UNDER_LGPL)) {
10849  lstr = "LGPL-3.0-only";
10850  lmem[_mLGPL] = 1;
10851  }
10852  else if (GPL_INFILE(_PHR_LGPL3_ONLY)
10853  || INFILE(_FILE_LGPLv3)
10854  || GPL_INFILE(_PHR_LGPL3_ONLY_ref1)
10855  || GPL_INFILE(_PHR_LGPL3_ONLY_ref2))
10856  {
10857  lstr = "LGPL-3.0-only";
10858  }
10859  else if (INFILE(_PHR_LGPL21_ONLY)
10860  || INFILE(_FILE_LGPLv21)
10861  || URL_INFILE(_URL_LGPL_V21)
10862  || INFILE(_PHR_LGPL21_ONLY_ref)
10863  || INFILE(_PHR_LGPL21_ONLY_ref2)
10864  || INFILE(_PHR_LGPL21_ONLY_ref3)
10865  || INFILE(_PHR_LGPL21_ONLY_ref4))
10866  {
10867  lstr = "LGPL-2.1-only";
10868  }
10869  else if ((INFILE(_PHR_LGPL2_OR_LATER)
10870  || HASTEXT(_PHR_LGPL2_OR_LATER_2, REG_EXTENDED)
10871  || HASTEXT(_PHR_LGPL2_OR_LATER_3, REG_EXTENDED))
10872  && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED))
10873  {
10874  lstr = "LGPL-2.0-or-later";
10875  }
10876  else if (RM_INFILE(_PHR_LGPL2_ONLY) || RM_INFILE(_PHR_LGPL2_ONLY_ref1) || INFILE(_FILE_LGPLv2)) {
10877  lstr = "LGPL-2.0-only";
10878  }
10879  else if (INFILE(_PHR_LGPL1_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
10880  lstr = "LGPL-1.0-or-later";
10881  }
10882  else if (INFILE(_PHR_LGPL1_ONLY) || INFILE(_PHR_FSF_V1_ONLY)) {
10883  lstr = "LGPL-1.0-only";
10884  }
10885  else if (URL_INFILE(_URL_CCLGPL_V21)) {
10886  lstr = lDebug ? "CC-LGPL-2.1" : "LGPL-2.1-only";
10887  }
10888  else if (INFILE(_LT_CC_GPL) || INFILE(_TITLE_CC_LGPL)) {
10889  lstr = "CC-LGPL";
10890  }
10891  else if (NY_INFILE(_TEXT_LGPLV3) && NOT_INFILE(_TEXT_LGPLV3_FOOTNOTE) &&
10892  HASREGEX(_TEXT_LGPLV3, filetext)) {
10893  lstr = lDebug ? "LGPL-v3(#2)" : "LGPL-3.0-only";
10894  }
10895  else if (INFILE(_TEXT_LGPLV21) &&
10896  HASREGEX(_TEXT_LGPLV21, filetext)) {
10897  lstr = lDebug ? "LGPL-v2.1(#2)" : "LGPL-2.1-only";
10898  }
10899  else if (INFILE(_TEXT_LGPLV2) &&
10900  HASREGEX(_TEXT_LGPLV2, filetext)) {
10901  lstr = lDebug ? "LGPL-v2(#2)" : "LGPL-2.0-only";
10902  }
10903  else if (INFILE(_SPDX_LGPL_20)) {
10904  lstr = "LGPL-2.0-only";
10905  }
10906  else if (INFILE(_SPDX_LGPL_21)) {
10907  lstr = "LGPL-2.1-only";
10908  }
10909  else if (INFILE(_SPDX_LGPL_30)) {
10910  lstr = "LGPL-3.0-only";
10911  }
10912  else {
10913  lstr = "LGPL";
10914  }
10915  return lstr;
10916 }
10917 
10926 char *gplVersion(char *filetext, int size, int isML, int isPS)
10927 {
10928  char *cp, *lstr = NULL_STR;
10929  /* */
10930 #ifdef PROC_TRACE
10931  traceFunc("== gplVersion()\n");
10932 #endif /* PROC_TRACE */
10933  /* */
10934 
10935  /*
10936  * GPL-3.0-only cases
10937  */
10938  if (GPL_INFILE(_PHR_GPL3_OR_LATER_ref2)
10939  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref3)
10940  || GPL_INFILE(_PHR_GPL3_OR_LATER)
10941  || GPL_INFILE(_PHR_GPL3_OR_LATER_ref1)
10942  || HASTEXT(_SPDX_GPL_30plus, REG_EXTENDED)
10943  || HASTEXT(_PHR_GPL_30plus, REG_EXTENDED))
10944  {
10945  if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
10946  lstr = "GPL-3.0-or-later";
10947  if (INFILE(_PHR_GPL2_OR_LATER_1)) {
10948  lstr = "GPL-2.0-or-later,GPL-3.0-or-later";
10949  }
10950  }
10951  }
10952  else if (GPL_INFILE(_PHR_FSF_V3_ONLY)
10953  || GPL_INFILE(_PHR_GPL3_ONLY)
10954  || INFILE(_FILE_GPLv3)
10955  || GPL_INFILE(_PHR_GPL3_ONLY_ref1)
10956  || GPL_INFILE(_PHR_GPL3_ONLY_ref2)) {
10957  lstr = lDebug ? "GPL-v3(#2)" : "GPL-3.0-only";
10958  if (INFILE(_PHR_GPL2_OR_LATER_1))
10959  {
10960  lstr = "GPL-2.0-or-later,GPL-3.0-only";
10961  }
10962  }
10963  else if (NY_INFILE(_TEXT_GPLV3) && NOT_INFILE(_TEXT_GPLV3_FOOTNOTE) &&
10964  HASREGEX(_TEXT_GPLV3, filetext)) {
10965  lstr = lDebug ? "GPL-v3(#3)" : "GPL-3.0-only";
10966  }
10967  /*
10968  * GPL-2.0-only cases
10969  */
10970  else if (HASTEXT(_LT_GPL_V2_NAMED_later, REG_EXTENDED) || INFILE(_TITLE_GPL2_ref1_later)) {
10971  lstr = lDebug ? "GPLV2+(named)" : "GPL-2.0-or-later";
10972  }
10973  else if (HASTEXT(_SPDX_GPL_20_or_later, REG_EXTENDED)) {
10974  lstr = lDebug ? "GPL-2.0-or-later(SPDX)" : "GPL-2.0-or-later";
10975  }
10976  else if (INFILE(_PHR_GPL2_OR_LATER_1)) {
10977  if (INFILE(_TITLE_GPL_KDE)) {
10978  lstr = "GPL-2.0-or-laterKDEupgradeClause";
10979  }
10980  else if (INFILE(_PHR_GPL2_ONLY_2) || INFILE(_PHR_GPL2_ONLY_3)) {
10981  lstr = "GPL-2.0-only";
10982  }
10983  else if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
10984  lstr = lDebug ? "PHR(GPL2_OR_LATER#3)" : "GPL-2.0-or-later";
10985  }
10986  else if (INFILE(_TITLE_GPL2_ref1) || INFILE(_TITLE_GPL2_ref2)) {
10987  lstr = lDebug ? "GPL-2.0-only(title)" : "GPL-2.0-only";
10988  }
10989  }
10990  else if (HASTEXT(_SPDX_GPL_20, REG_EXTENDED)) {
10991  lstr = lDebug ? "GPL-2.0-only(SPDX)" : "GPL-2.0-only";
10992  }
10993  else if (INFILE(_PHR_GPL2_ONLY_4)) {
10994  lstr = "GPL-2.0-only";
10995  }
10996  else if (INFILE(_PHR_GPL2_ONLY_5)) {
10997  lstr = "GPL-2.0-only";
10998  }
10999  else if (GPL_INFILE(_PHR_GPL2_OR_GPL3)) {
11000  lstr = "GPL-2.0-only,GPL-3.0-only";
11001  }
11002  else if (INFILE(_PHR_FSF_V2_ONLY) || INFILE(_PHR_GPL2_ONLY) || INFILE(_PHR_GPL2_ONLY_1) ||
11003  INFILE(_FILE_GPLv2) || INFILE(_LT_GPL_V2_NAMED)) {
11004  lstr = lDebug ? "GPL-v2(#2)" : "GPL-2.0-only";
11005  }
11006  else if (INFILE(_LT_GPL_V2_ref5)) {
11007  lstr = lDebug ? "GPL-2.0-only(ref5)" : "GPL-2.0-only";
11008  }
11009  else if (NY_INFILE(_TEXT_GPLV2)) {
11010  lstr = lDebug ? "GPL-v2(#3)" : "GPL-2.0-only";
11011  }
11012  /*
11013  * GPL-1.0-only cases
11014  */
11015  else if (GPL_INFILE(_PHR_FSF_V1_OR_LATER)
11016  || INFILE(_PHR_GPL1_OR_LATER)
11017  || HASTEXT(_SPDX_GPL_10plus, REG_EXTENDED)
11018  || HASTEXT(_PHR_GPL_10plus, REG_EXTENDED))
11019  {
11020  if (INFILE(_TITLE_GPL1)) {
11021  lstr = lDebug ? "GPL-v1(#1)" : "GPL-1.0-only";
11022  }
11023  else if (!HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
11024  lstr = "GPL-1.0-or-later";
11025  }
11026  }
11027  else if (INFILE(_PHR_FSF_V1_ONLY) || INFILE(_PHR_GPL1_ONLY)) {
11028  lstr = lDebug ? "GPL-v1(#2)" : "GPL-1.0-only";
11029  }
11030  else if (URL_INFILE(_URL_CCGPL_V2)) {
11031  lstr = "GPL-2.0-only";
11032  }
11033  else if (INFILE(_LT_CC_GPL) || INFILE(_TITLE_CC_GPL)) {
11034  lstr = lDebug ? "GPL(CC_GPL)" : "GPL";
11035  }
11036  else if (NY_INFILE(_TEXT_GPLV1) &&
11037  HASREGEX(_TEXT_GPLV1, filetext)) {
11038  lstr = lDebug ? "GPL-v1(#3)" : "GPL-1.0-only";
11039  }
11040  else if (HASTEXT(_SPDX_GPL_10, REG_EXTENDED)) {
11041  lstr = lDebug ? "GPL-1.0-only(SPDX)" : "GPL-1.0-only";
11042  }
11043  else if (HASTEXT(_SPDX_GPL_30, REG_EXTENDED)) {
11044  lstr = lDebug ? "GPL-3.0-only(SPDX)" : "GPL-3.0-only";
11045  }
11046  /* special case for Debian copyright files
11047  Moved from the beginning here under else if ... is this anymore needed
11048  */
11049  else if (INFILE(_TEXT_GPLV3_CR) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
11050  lstr = "GPL-3.0-only";
11051  }
11052  else if (INFILE(_FILE_GPL1) || INFILE(_FILE_GPL2)) {
11053  lstr = lDebug ? "GPL(deb)" : "GPL";
11054  }
11055  /*
11056  * MODULE("GPL") cannot be unambiguously interpreted as GPL-2.0-only
11057  * license. Same statement is used also outside Linux kernel.
11058  * Furthermore, many of the files which have this MODULE statement,
11059  * have explicit GPL license statement. Therefore this is changed
11060  * to GPL.
11061  */
11062  else if (INFILE(_TITLE_MODULE_LICENSE_GPL)) {
11063  lstr = lDebug ? "GPL(linux-kernel)" : "GPL";
11064  }
11065  /*
11066  * Finally let's see if there is a type error in license version
11067  */
11068  else if (INFILE(_PHR_GPL21_OR_LATER) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
11069  lstr = "GPL-2.1+[sic]";
11070  }
11071  else if (INFILE(_PHR_FSF_V21_ONLY) || INFILE(_PHR_GPL21_ONLY)) {
11072  lstr = lDebug ? "GPL-v2.1[sic]" : "GPL-2.1[sic]";
11073  }
11074  /*
11075  * Special case, HACK: "Debian packaging ... licensed under GPL"
11076  *****
11077  * IF we've scanned the regex that might contain it, then kludge.buf != NULL.
11078  * Make darn sure that pointer IS set to NULL before leaving this routine.
11079  */
11080  if (lstr == NULL_STR && kludge.base != NULL_STR) {
11081 #ifdef PHRASE_DEBUG
11082  printf("GPL-META-CHECK: base %p, so %d eo %d\n",
11083  kludge.base, kludge.sso, kludge.seo);
11084 #endif /* PHRASE_DEBUG */
11085  cp = kludge.base + (kludge.sso < 256 ? 0 : kludge.sso-256);
11086  if (HASREGEX(_LT_GPL_META_DEBIAN, cp)) {
11087  lstr = "GPL-Meta";
11088  }
11089  kludge.base = NULL_STR;
11090  }
11091  if (lstr == NULL_STR && NOT_INFILE(_PHR_JYTHON_NOTGPL) && !HASTEXT(_TITLE_QT_GPL_EXCEPTION_10, 0) && !HASTEXT(_LT_OPENBSD_GPL_EXCEPTION, 0)) {
11092  lstr = lDebug ? "GPL(NULL)" : "GPL";
11093  }
11094  return lstr;
11095 }
11096 
11105 char *cplVersion(char *filetext, int size, int isML, int isPS)
11106 {
11107  char *lstr = NULL_STR;
11108  /* */
11109 #ifdef PROC_TRACE
11110  traceFunc("== cplVersion()\n");
11111 #endif /* PROC_TRACE */
11112  /* */
11113  if (INFILE(_TITLE_CPL_10)) {
11114  lstr = "CPL-1.0";
11115  }
11116  else if (URL_INFILE(_URL_CPL_10)) {
11117  lstr = "CPL-1.0";
11118  }
11119  else if (INFILE(_TITLE_CPL_05)) {
11120  lstr = "CPL-0.5";
11121  }
11122  else {
11123  lstr = "CPL";
11124  }
11125  return lstr;
11126 }
11127 
11136 char *ccVersion(char *filetext, int size, int isML, int isPS)
11137 {
11138  char *lstr = NULL_STR;
11139  /* */
11140 #ifdef PROC_TRACE
11141  traceFunc("== ccVersion()\n");
11142 #endif /* PROC_TRACE */
11143  /*
11144  * Creative Commons Attribution-ShareAlike
11145  */
11146  if (INFILE(_TITLE_CC_BY_SA_10) || URL_INFILE(_URL_CC_BY_SA_10)) {
11147  lstr = "CC-BY-SA-1.0";
11148  }
11149  else if (INFILE(_TITLE_CC_BY_SA_20) || URL_INFILE(_URL_CC_BY_SA_20)) {
11150  lstr = "CC-BY-SA-2.0";
11151  }
11152  else if (INFILE(_TITLE_CC_BY_SA_25) || URL_INFILE(_URL_CC_BY_SA_25)) {
11153  lstr = "CC-BY-SA-2.5";
11154  }
11155  else if (INFILE(_TITLE_CC_BY_SA_30) || URL_INFILE(_URL_CC_BY_SA_30)) {
11156  lstr = "CC-BY-SA-3.0";
11157  }
11158  else if (INFILE(_PHR_CC_BY_SA_30)) {
11159  lstr = "CC-BY-SA-3.0";
11160  }
11161  else if (INFILE(_TITLE_CC_BY_SA_40) || URL_INFILE(_URL_CC_BY_SA_40)) {
11162  lstr = "CC-BY-SA-4.0";
11163  }
11164  else if (URL_INFILE(_URL_CC_BY_SA_20)) {
11165  lstr = "CC-BY-SA-2.0";
11166  }
11167  else if (INFILE(_TITLE_CC_BY_SA) || URL_INFILE(_URL_CC_BY_SA)) {
11168  lstr = lDebug ? "CCA-SA(1)" : "CC-BY-SA";
11169  }
11170  /*
11171  * Creative Commons Attribution-NonCommercial-ShareAlike
11172  */
11173  else if (INFILE(_TITLE_CC_BY_NC_SA_40) || URL_INFILE(_URL_CC_BY_NC_SA_40)) {
11174  lstr = "CC-BY-NC-SA-4.0";
11175  }
11176  else if (INFILE(_TITLE_CC_BY_NC_SA_30) || URL_INFILE(_URL_CC_BY_NC_SA_30)) {
11177  lstr = "CC-BY-NC-SA-3.0";
11178  }
11179  else if (INFILE(_TITLE_CC_BY_NC_SA_25) || URL_INFILE(_URL_CC_BY_NC_SA_25)) {
11180  lstr = "CC-BY-NC-SA-2.5";
11181  }
11182  else if (INFILE(_TITLE_CC_BY_NC_SA_20) || URL_INFILE(_URL_CC_BY_NC_SA_20)) {
11183  lstr = "CC-BY-NC-SA-2.0";
11184  }
11185  else if (INFILE(_TITLE_CC_BY_NC_SA_10) || URL_INFILE(_URL_CC_BY_NC_SA_10)) {
11186  lstr = "CC-BY-NC-SA-1.0";
11187  }
11188  /*
11189  * Creative Commons NonCommercial NoDerivs
11190  */
11191  else if (INFILE(_TITLE_CC_BY_NC_ND_40) || URL_INFILE(_URL_CC_BY_NC_ND_40)) {
11192  lstr = "CC-BY-NC-ND-4.0";
11193  }
11194  else if (INFILE(_TITLE_CC_BY_NC_ND_30) || INFILE(_TITLE_CC_BY_NC_ND_30_1) || URL_INFILE(_URL_CC_BY_NC_ND_30)) {
11195  lstr = "CC-BY-NC-ND-3.0";
11196  }
11197  else if (INFILE(_TITLE_CC_BY_NC_ND_25) || INFILE(_TITLE_CC_BY_NC_ND_25_1) || URL_INFILE(_URL_CC_BY_NC_ND_25)) {
11198  lstr = "CC-BY-NC-ND-2.5";
11199  }
11200  else if (INFILE(_TITLE_CC_BY_NC_ND_20) || INFILE(_TITLE_CC_BY_NC_ND_20_1) || URL_INFILE(_URL_CC_BY_NC_ND_20)) {
11201  lstr = "CC-BY-NC-ND-2.0";
11202  }
11203  else if (INFILE(_TITLE_CC_BY_NC_ND_10) || INFILE(_TITLE_CC_BY_NC_ND_10_1) || INFILE(_TITLE_CC_BY_NC_ND_10_2) || URL_INFILE(_URL_CC_BY_NC_ND_10)) {
11204  lstr = "CC-BY-NC-ND-1.0";
11205  }
11206  /*
11207  * Creative Commons NonCommercial
11208  */
11209  else if (INFILE(_TITLE_CC_BY_NC_40) || URL_INFILE(_URL_CC_BY_NC_40)) {
11210  lstr = "CC-BY-NC-4.0";
11211  }
11212  else if (INFILE(_TITLE_CC_BY_NC_30) || URL_INFILE(_URL_CC_BY_NC_30)) {
11213  lstr = "CC-BY-NC-3.0";
11214  }
11215  else if (INFILE(_TITLE_CC_BY_NC_25) || URL_INFILE(_URL_CC_BY_NC_25)) {
11216  lstr = "CC-BY-NC-2.5";
11217  }
11218  else if (INFILE(_TITLE_CC_BY_NC_20) || URL_INFILE(_URL_CC_BY_NC_20)) {
11219  lstr = "CC-BY-NC-2.0";
11220  }
11221  else if (INFILE(_TITLE_CC_BY_NC_10) || URL_INFILE(_URL_CC_BY_NC_10)) {
11222  lstr = "CC-BY-NC-1.0";
11223  }
11224  /*
11225  * Creative Commons Attribution-NoDerivatives
11226  */
11227  else if (INFILE(_TITLE_CC_BY_ND_40) || URL_INFILE(_URL_CC_BY_ND_40)) {
11228  lstr = "CC-BY-ND-4.0";
11229  }
11230  else if (INFILE(_TITLE_CC_BY_ND_30) || URL_INFILE(_URL_CC_BY_ND_30)) {
11231  lstr = "CC-BY-ND-3.0";
11232  }
11233  else if (INFILE(_TITLE_CC_BY_ND_25) || URL_INFILE(_URL_CC_BY_ND_25)) {
11234  lstr = "CC-BY-ND-2.5";
11235  }
11236  else if (INFILE(_TITLE_CC_BY_ND_20) || URL_INFILE(_URL_CC_BY_ND_20)) {
11237  lstr = "CC-BY-ND-2.0";
11238  }
11239  else if (INFILE(_TITLE_CC_BY_ND_10) || URL_INFILE(_URL_CC_BY_ND_10)) {
11240  lstr = "CC-BY-ND-1.0";
11241  }
11242  /*
11243  * Creative Commons Attribution
11244  */
11245  else if (INFILE(_TITLE_CC_BY_10) || URL_INFILE(_URL_CC_BY_10)) {
11246  lstr = "CC-BY-1.0";
11247  }
11248  else if (INFILE(_TITLE_CC_BY_20) || URL_INFILE(_URL_CC_BY_20)) {
11249  lstr = "CC-BY-2.0";
11250  }
11251  else if (INFILE(_TITLE_CC_BY_25) || URL_INFILE(_URL_CC_BY_25)) {
11252  lstr = "CC-BY-2.5";
11253  }
11254  else if (INFILE(_TITLE_CC_BY_30) || URL_INFILE(_URL_CC_BY_30)) {
11255  lstr = "CC-BY-3.0";
11256  }
11257  else if (INFILE(_PHR_CC_BY_40) || INFILE(_TITLE_CC_BY_40) || URL_INFILE(_URL_CC_BY_40)) {
11258  lstr = "CC-BY-4.0";
11259  }
11260  /*
11261  * Creative Commons CC0
11262  */
11263  else if (INFILE(_TITLE_CC0_10_2)) {
11264  lstr = lDebug ? "CC0(2)" : "CC0-1.0";
11265  }
11266  else if (INFILE(_PHR_CC0_2)) {
11267  lstr = lDebug ? "CC0(2)" : "CC0-1.0";
11268  }
11269  else if (URL_INFILE(_URL_CC0)) {
11270  lstr = lDebug ? "CC0(URL)" : "CC0-1.0";
11271  }
11272  else if (URL_INFILE(_URL_CC_PDDC)) {
11273  lstr = lDebug ? "CC(PD)" : "CC-PDDC";
11274  pd = 1;
11275  }
11276  else if (INFILE(_TITLE_CCPL)) {
11277  INTERESTING("CCPL");
11278  }
11279  else if (INFILE(_TITLE_CC_BY)) {
11280  lstr = lDebug ? "CCA(1)" : "CC-BY";
11281  }
11282  else {
11283  lstr = lDebug ? "CCA(def)" : "CC-BY";
11284  }
11285  lmem[_fCCBY] = 1;
11286  return lstr;
11287 }
11288 
11305 int findPhrase(int index, char *filetext, int size, int isML, int isPS,
11306  int qType)
11307 {
11308  char *ptr = NULL_STR;
11309  char *q = ltsr+index;
11310  char *cp = 0;
11311  int ret;
11312  int i;
11313  int j;
11314  int n;
11315  int wordMatch = 0;
11316  int metaKludge = 0;
11317  int saved = 0;
11318  int sso;
11319  int seo;
11320  item_t *sp;
11321  item_t *op;
11322  list_t *lp;
11323  licText_t *ltp;
11324 #ifdef PARSE_STOPWATCH
11325  DECL_TIMER; /* timer declaration */
11326  char timerName[64];
11327 #endif /* PARSE_STOPWATCH */
11328 
11329 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG) || defined(DOCTOR_DEBUG)
11330  traceFunc("== findPhrase(%d, %p, %d, %d, %d, %d)\n", index, filetext,
11331  size, isML, isPS, qType);
11332  traceFunc("... (regex) \"%s\"\n", _REGEX(index));
11333  traceFunc("... (seed) \"%s\"\n", _SEED(index));
11334 #endif /* PROC_TRACE || PHRASE_DEBUG || DOCTOR_DEBUG */
11335 
11336  ltp = licText + index; /* &licText[index] */
11337  if (ltp->tseed == NULL_STR) {
11338  LOG_FATAL("Regex #%d not suitable for findPhrase()", index)
11339  Bail(-__LINE__);
11340  }
11341  *q |= LTSR_SMASK; /* init: tested, no match */
11342 #ifdef PARSE_STOPWATCH
11343  (void) sprintf(timerName, "findPhrase(%03d): ", index);
11344  START_TIMER;
11345 #endif /* PARSE_STOPWATCH */
11346 #if (DEBUG > 5)
11347  printf("findPhrase: firstword[%d] == \"%s\", used = %d\n", index,
11348  ltp->tseed, searchList.used);
11349 #endif /* DEBUG > 5 */
11350  /*
11351  * See if the first-word of the requested entry has been searched
11352  * previously. The entry we get from listGetItem() refCount (val) field is:
11353  * =0 if this is the first search for this word (non-zero == "seen it"!)
11354  * <0 if the word was NOT FOUND
11355  * >0 if we have doctored-text results cached
11356  */
11357  if ((sp = listGetItem(&searchList, ltp->tseed)) == NULL_ITEM) {
11358  LOG_FATAL("search cache")
11359  Bail(-__LINE__);
11360  }
11361  if (sp->refCount < 0) { /* tseed not found in text */
11362  sp->refCount--;
11363 #ifdef PARSE_STOPWATCH
11364  END_TIMER; /* stop the timer */
11365  (void) strcat(timerName, "Cache-NO - ");
11366  (void) strcat(timerName, ltp->tseed);
11367  PRINT_TIMER(timerName, 0);
11368 #endif /* PARSE_STOPWATCH */
11369  return(0);
11370  }
11371  else if (sp->refCount == 0) { /* e.g., first occurence */
11372 
11373  /*
11374  * Since this is the first search of this word, see if it's in the text.
11375  * NOTE: getInstances() returns a pointer to static (non-allocated) storage
11376  */
11377  if ((cur.nLines) <= 5) {
11378  i = 1;
11379  j = 2;
11380  } else if ((size / cur.nLines) <= 10) {
11381  i = 2;
11382  j = 4;
11383  } else {
11384  i = 3;
11385  j = 6;
11386  }
11387 
11388  /* change to not get record offsets since there is a good sized memory
11389  leak in that code */
11390  //ptr = getInstances(filetext, size, i, j, sp->str, YES);
11391  ptr = getInstances(filetext, size, i, j, sp->str, NO);
11392 
11393  if (ptr == NULL_STR) {
11394  sp->refCount = -1;
11395  /* sp->buf = NULL_STR; */
11396 #ifdef PARSE_STOPWATCH
11397  END_TIMER; /* stop the timer */
11398  (void) strcat(timerName, "tseed-NO - ");
11399  (void) strcat(timerName, ltp->tseed);
11400  PRINT_TIMER(timerName, 0);
11401 #endif /* PARSE_STOPWATCH */
11402  return(0); /* known !match */
11403  }
11404  sp->buf = copyString(ptr, "paragraph");
11405 #ifdef MEMSTATS
11406  printf("... adding %d bytes (search-lookup: \"%s\")\n",
11407  strlen(sp->buf), sp->str);
11408 #endif /* MEMSTATS */
11409  /*
11410  * If the search-seed and regex are the same, we found what we're looking
11411  * for. Else, use doctorBuffer() to strip out punctuation, XML/HTML
11412  * directives, etc.
11413  */
11414 #ifdef PARSE_STOPWATCH
11415  START_TIMER;
11416 #endif /* PARSE_STOPWATCH */
11417 #ifdef DOCTOR_DEBUG
11418  printf(" ... doctoring buffer for \"%s\"\n", sp->str);
11419 #endif /* DOCTOR_DEBUG */
11420  (void) doctorBuffer(sp->buf, isML, isPS, NO);
11421 #ifdef PARSE_STOPWATCH
11422  RESET_TIMER;
11423  (void) sprintf(timerName, "... doctor(%03d): %s (%d)",
11424  index, ltp->tseed, strlen(sp->buf));
11425  PRINT_TIMER(timerName, 0);
11426 #endif /* PARSE_STOPWATCH */
11427  }
11428  sp->refCount++; /* incr ref-count for this seed */
11429  /*
11430  * We need populate the list of "paragraph matches" with offsets in the
11431  * doctored-up buffers; this seems the best place to do it.
11432  */
11433  op = listGetItem(&cur.offList, sp->str);
11434  if (op->nMatch <= 0) {
11435  LOG_FATAL("File-offset list, nMatch(%s): bad entry", sp->str)
11436  Bail(-__LINE__);
11437  }
11438 #if DEBUG>5
11439  printf("matches for key \"%s\": %d\n", sp->str, op->nMatch);
11440 #endif /* DEBUG>5 */
11441  n = strlen(sp->buf);
11442  lp = (list_t *)op->bList;
11443  if ((lp) && (lp->items[0].bDocLen == 0)) {
11444  if (op->nMatch == 1) {
11445  lp->items[0].bDocLen = n;
11446  } else {
11447  ptr = sp->buf;
11448  i = j = 0; /* i is index, j is total offset */
11449  while (strGrep(" xyzzy ", ptr, REG_ICASE)) {
11450  lp->items[i++].bDocLen = j + cur.regm.rm_so;
11451  ptr += cur.regm.rm_eo;
11452  j += (cur.regm.rm_eo + 7); /* strlen(" xyzzy ") */
11453  }
11454  lp->items[i].bDocLen = n + 7; /* last paragraph */
11455  }
11456  }
11457  if (ltp->tseed == ltp->regex) { /* e.g., regex IS seed/key */
11458  wordMatch++;
11459  ret = 1;
11460  } else {
11461  metaKludge = ((qType == 2) && (index == _LT_GPLref1));
11462  if (metaKludge || qType == 4) {
11463  saved = 1;
11464  gl.flags |= FL_SAVEBASE;
11465  }
11466  ret = HASREGEX_RI(index, sp->buf);
11467  if (saved) {
11468  if (ret) {
11469  kludge.base = cur.matchBase;
11470  kludge.sso = cur.regm.rm_so;
11471  kludge.seo = cur.regm.rm_eo;
11472  }
11473  gl.flags &= ~FL_SAVEBASE;
11474  }
11475  }
11476  sso = cur.regm.rm_so; /* do NOT modify this!! */
11477  seo = cur.regm.rm_eo; /* ... or this, either! */
11478  if (ret && !wordMatch) {
11479  *q = LTSR_YES; /* remember this "yes" search result */
11480 
11481  /*
11482  * VERY low-level string-search kludges happen here. This is VERY ugly!!
11483  *****
11484  * If we used idxGrep to search for "GPL" in a "doctored" buffer, we do NOT
11485  * want to match "lesser GPL" or "library GPL" in our searches (it's the
11486  * wrong license name/title). Unfortunately, two aliases for LGPL are
11487  * exactly those above. If we match "GPL" with a wildcard preceeding it, it
11488  * JUST MIGHT BE those words. Rather than perform 2 exclusionary searches
11489  * one for "lesser gpl" and another for "library gpl", look here and if we
11490  * find it, (ugh) KLUDGE the return value to indicate "no match"...
11491  *****
11492  * However, since it's here, it's now extensible. Next search-string kludge
11493  * (that cannot be quickly fixed via changing a regex) should be number 2.
11494  * Just make a new macro (defined above parseLicenses), ala GPL_INFILE().
11495  */
11496  if ((qType > 0) && !wordMatch) {
11497  if ((qType > 4) || (qType < 0)) {
11498  LOG_FATAL("Unknown string-search kludge %d", qType)
11499  Bail(-__LINE__);
11500  }
11501  /*
11502  * Special filter #1: over-write matched text with commas -- this choice is
11503  * significant because doctorBuffer() ensures 'stripped' text has no commas
11504  */
11505  if (qType == 1) { /* destroy text-match */
11506  cp = sp->buf+seo;
11507  ptr = sp->buf+sso;
11508  ltsr[index] = 0; /* reset search cache */
11509  while (ptr <= cp) {
11510  *ptr++ = ',';
11511  }
11512 #ifdef DEBUG
11513  if (lDiags) {
11514  printf("Now, buf %p contains:\n%s\n",
11515  sp->buf, (char *)sp->buf);
11516  }
11517 #endif /* DEBUG */
11518  /*
11519  * Special filter #2: various checks to make sure LGPL/GFDL/GPL license
11520  * references are not confused -- they CAN look quite similar. Specifically
11521  * we don't want to confuse a SINGLE reference to the LGPL as a reference to
11522  * the GPL. BUT -- sometimes references to BOTH are in the same file.
11523  */
11524  }
11525  if ((qType == 2) &&
11526  HASREGEX(_TEXT_LGPL_NOT_GPL, sp->buf+sso) &&
11527  !HASREGEX(_TEXT_GPL_NOT_LGPL, sp->buf+sso) &&
11528  NOT_INFILE(_TEXT_LGPL_DETAILS) &&
11529  NOT_INFILE(_TEXT_LICSET)) {
11530  if (lDiags) {
11531  printf("... \"GPL\" -> LGPL (%d)\n",
11532  index);
11533  }
11534  ltsr[_TEXT_LGPL_NOT_GPL] = LTSR_YES;
11535  ret = 0;
11536  *q = LTSR_NO; /* oops, make that a "no" */
11537  } else if ((qType == 2) &&
11538  HASREGEX(_TEXT_GFDL_NOT_GPL, sp->buf+sso)) {
11539  if (lDiags) {
11540  printf("... \"GPL\" -> GFDL (%d)\n",
11541  index);
11542  }
11543  ltsr[_TEXT_GFDL_NOT_GPL] = LTSR_YES;
11544  ret = 0;
11545  *q = LTSR_NO;
11546  } else if ((index == _LT_GPL3ref) && (qType == 2)) {
11547  if (HASREGEX(_PHR_QEMU_NOT_GPLV3, sp->buf+sso)) {
11548  if (lDiags) {
11549  printf("... \"GPL\" -> QEMU\n");
11550  }
11551  ltsr[_PHR_QEMU_NOT_GPLV3] = LTSR_YES;
11552  ret = 0;
11553  *q = LTSR_NO;
11554  } else if (INFILE(_PHR_SCF_HOWTO)) {
11555  if (lDiags) {
11556  printf("... SCF-Howto\n");
11557  }
11558  ret = 0;
11559  *q = LTSR_NO;
11560  } else if (HASREGEX(_TEXT_DRBD_NOT_GPL3, sp->buf)) {
11561  if (lDiags) {
11562  printf("... mysgl/DRBD\n");
11563  }
11564  ltsr[_TEXT_DRBD_NOT_GPL3] = LTSR_YES;
11565  ret = 0;
11566  *q = LTSR_NO;
11567  }
11568 #ifdef GPLV2_BEATS_GPLV3
11569  else if (strNbuf(sp->buf+sso, "version 2")) {
11570  if (sp->buf + sso + cur.regm.rm_eo <
11571  sp->buf + seo) {
11572  if (lDiags) {
11573  printf("... v%c!\n", *cp);
11574  }
11575  ret = 0;
11576  *q = LTSR_NO;
11577  }
11578  }
11579 #endif /* GPLV2_BEATS_GPLV3 */
11580  } else if ((index == _PHR_GPL3_OR_LATER) &&
11581  (qType == 2) &&
11582  strNbuf(sp->buf+sso, "v2 ")) {
11583  if (lDiags) {
11584  printf("... v2 and version 3\"\n");
11585  }
11586  ret = 0;
11587  *q = LTSR_NO;
11588  } else if ((index == _PHR_GPL3_OR_LATER) &&
11589  (qType == 2) &&
11590  HASREGEX(_TEXT_NOT_GPLV3_DRAFT, sp->buf+sso)) {
11591  if (lDiags) {
11592  printf("... exclude \"GPLv3 draft\"\n");
11593  }
11594  ltsr[_TEXT_NOT_GPLV3_DRAFT] = LTSR_YES;
11595  ret = 0;
11596  *q = LTSR_NO;
11597  } else if ((index == _PHR_GPL3_ONLY) &&
11598  (qType == 2) &&
11599  HASREGEX(_TEXT_NOT_LIBSTDC, sp->buf+sso)) {
11600  if (lDiags) {
11601  printf("... exclude libstdc vers\"\n");
11602  }
11603  ltsr[_TEXT_NOT_LIBSTDC] = LTSR_YES;
11604  ret = 0;
11605  *q = LTSR_NO;
11606  }
11607  /*
11608  * POSIX regex matches the longest string possible, and a '3' can follow a
11609  * "version 2 or later phrase" -- we want to match the '2'. "Vim" has this:
11610  *****
11611  * e) When the GNU General Public License (GPL) applies to the changes,
11612  * you may distribute the modified code under the GNU GPL version 2 or
11613  * any later version.
11614  * 3) A message must be added, at least in the output of the ":version"
11615  * command and in the intro screen, such that the user ...
11616  *****
11617  * So... if there's a NUMBER (!= '3') between the word "version" and the
11618  * end-of-match (at sp->buf+seo), that matches the number AND NOT the 3.
11619  */
11620  else if ((qType == 2) &&
11621  ((index == _PHR_GPL3_ONLY) || (index == _PHR_LGPL3_ONLY))) {
11622  if (strNbuf(sp->buf+sso, "version") ||
11623  strNbuf(sp->buf+sso, "v3")) {
11624  cp = sp->buf + cur.regm.rm_eo;
11625  } else {
11626  cp = sp->buf + seo; /* "nil" loop */
11627  }
11628  for (ptr = sp->buf+seo; cp < ptr; cp++) {
11629  if (isdigit(*cp) && *cp != '3') {
11630  if (lDiags) {
11631  printf("... vers %c!\n",
11632  *cp);
11633  }
11634  ret = 0;
11635  *q = LTSR_NO;
11636  break;
11637  }
11638  }
11639  } else if (index == _PHR_FSF_V3_ONLY && qType == 2) {
11640  if (strNbuf(sp->buf+sso, "version")) {
11641 #ifdef GPLV2_BEATS_GPLV3
11642  ptr = sp->buf + sso + cur.regm.rm_so + 7;
11643 #endif /* GPLV2_BEATS_GPLV3 */
11644  cp = strchr(sp->buf+sso, '3');
11645  if (strncasecmp(cp, "3 tlb", 5) == 0) {
11646  if (lDiags) {
11647  printf("... v3 tlb\n");
11648  }
11649  ret = 0;
11650  *q = LTSR_NO;
11651  }
11652 #ifdef GPLV2_BEATS_GPLV3
11653  else if ((*ptr == ' ') && (*(ptr+1) == '2')) {
11654  if (lDiags) {
11655  printf("... v2, !v3\n");
11656  }
11657  ret = 0;
11658  *q = LTSR_NO;
11659  }
11660 #endif /* GPLV2_BEATS_GPLV3 */
11661  }
11662  else if (strNbuf(sp->buf+sso, "v3")) {
11663  cp = sp->buf + sso + cur.regm.rm_so;
11664  if (strncasecmp(cp-4, "arm ", 4) == 0) {
11665  if (lDiags) {
11666  printf("... arm v3\n");
11667  }
11668  ret = 0;
11669  *q = LTSR_NO;
11670  } else if (strncasecmp(cp, "v3020 ",
11671  6) == 0) {
11672  if (lDiags) {
11673  printf("... v3020\n");
11674  }
11675  ret = 0;
11676  *q = LTSR_NO;
11677  }
11678  }
11679  } else if ((index == _LT_LGPL_OR) &&
11680  (strncasecmp(sp->buf+sso, "or fitness f", 12) == 0)) {
11681  if (lDiags) {
11682  printf("... merch-or-fitness\n");
11683  }
11684  ret = 0;
11685  *q = LTSR_NO;
11686  } else if ((index == _LT_GPLref1) &&
11687  (qType == 2) &&
11688  INFILE(_PHR_LIC_CHANGE)) {
11689  if (lDiags) {
11690  printf("... exclude lic-change\"\n");
11691  }
11692  ret = 0;
11693  *q = LTSR_NO;
11694  } else if ((qType == 2) && (sso > 4)) {
11695  cp = sp->buf+sso-4;
11696  if (strncasecmp(cp, "not ", 4) == 0) {
11697  if (lDiags) {
11698  printf("... NOT l?gpl-ish\n");
11699  }
11700  ret = 0;
11701  *q = LTSR_NO; /* "no" */
11702  }
11703  } else if (qType == 3 && INFILE(_PHR_ARTISTIC_DESC1)) {
11704  /*
11705  Special filter #3: match specific versions of Perl
11706  references, but not all
11707  */
11708  if (lDiags) {
11709  printf("... exclude artistic defn\"\n");
11710  }
11711  ret = 0;
11712  *q = LTSR_NO;
11713  } else if (qType == 4) {
11714  /*
11715  Special filter #4: look for a numerical version
11716  number IFF NOT IN a string of (at least) 4 numerical
11717  characters (signifying a year/datestamp)
11718  */
11719  char *x;
11720  x = cp = cur.matchBase + sso;
11721  ptr = cp - (sso < 100 ? sso : 100);
11722  while (!isdigit(*cp)) {
11723  cp++;
11724  }
11725  if (isdigit(*(cp+1)) && isdigit(*(cp+2)) && isdigit(*(cp+3))) {
11726  if (lDiags) {
11727  printf("... don't want year\n");
11728  }
11729  ret = 0;
11730  *q = LTSR_NO;
11731  } else if (HASREGEX(_TEXT_GNU_HELLO_23, ptr)) {
11732  if (lDiags) {
11733  printf("... gnu example\n");
11734  }
11735  ret = 0;
11736  *q = LTSR_NO;
11737  }
11738 #ifdef GPLV2_BEATS_GPLV3
11739  else if (strncasecmp(x-5, "v2 or ", 5) == 0) {
11740  if (lDiags) {
11741  printf("... v2 or v3\n");
11742  }
11743  ret = 0;
11744  *q = LTSR_NO;
11745  }
11746 #endif /* GPLV2_BEATS_GPLV3 */
11747  /*
11748  * Special case - don't know where better to look for this... other strings
11749  * match TEXT_GPLV3 and should be filtered. This should be a fairly low
11750  * frequency check.
11751  */
11752  else if (index == _TEXT_GPLV3) {
11753  x = cur.matchBase + seo;
11754  if (isdigit(*x) && *x != '0') {
11755  if (lDiags) {
11756  printf("... v3#!0\n");
11757  }
11758  ret = 0;
11759  *q = LTSR_NO;
11760  }
11761  }
11762  }
11763  }
11764 #if (DEBUG > 5)
11765  printf(">>===> \"%s\"\n", ltp->regex);
11766 #endif /* DEBUG > 5 */
11767  }
11768 #ifdef PARSE_STOPWATCH
11769  END_TIMER; /* stop the timer */
11770  (void) sprintf(timerName, "findPhrase(%03d): RET=%d (%s:%d)", index,
11771  ret, ltp->tseed, strlen(sp->buf));
11772  PRINT_TIMER(timerName, 0);
11773 #endif /* PARSE_STOPWATCH */
11774  if (lDiags && ret) {
11775  printRegexMatch(index, NO);
11776  /* locateRegex(filetext, op, index, size, sso, seo); */
11777  }
11778  return(ret);
11779 }
11780 
11795 void locateRegex(char *text, item_t *op, int index, int size, int sso, int seo)
11796 {
11797  int i;
11798  int j;
11799  int n;
11800  int off;
11801  int len;
11802  item_t *sp;
11803  list_t *lp = (list_t *)op->bList;
11804  char *cp;
11805  char *ptr;
11806  char *start;
11807  char save;
11808 
11809 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
11810  traceFunc("== locateRegex(%p, %p, %d, %d, %d, %d)\n", text, op, index,
11811  size, sso, seo);
11812 #endif /* PROC_TRACE || PHRASE_DEBUG */
11813 
11814  /*
11815  * First step, simplest case - try to locate the regex in the file. It
11816  * *might* be that easy (but not very often, it turns out).
11817  */
11818  if (idxGrep(index, text, REG_ICASE|REG_EXTENDED)) {
11819  saveRegexLocation(index, cur.regm.rm_so,
11820  cur.regm.rm_eo - cur.regm.rm_so, YES);
11821  return;
11822  }
11823  /*
11824  * Regex is not directly in the raw text file, so now we need to try to
11825  * map a location from a 'doctored buffer' to a location in the original
11826  * text file. Not impossible, yet not overly straight-forward.
11827  */
11828 #ifdef DEBUG
11829  listDump(lp, NO);
11830  printf("Doc-buffer match @ %d:%d\n", sso, seo);
11831  printf("Possible \"%s\" entries to search: %d (%d)\n", op->str,
11832  op->nMatch, lp->used);
11833  for (n = i = 0; (sp=listIterate(lp)); i++) {
11834  printf("Ent[%d]: bDocLen %d (len %d) == file %d+%d (%d)\n",
11835  i, sp->bDocLen, (sp->bDocLen)-n, sp->bStart, sp->bLen,
11836  sp->bStart+sp->bLen);
11837  n = sp->bDocLen;
11838  }
11839 #endif /* DEBUG */
11840  /*
11841  * At this point, the matched phrase should be bounded by {sso} and {seo}
11842  * as offsets within the doctored buffer we're scanning. We also have a
11843  * mapping of offsets within the doctored buffer to more-or-less where it
11844  * exists in the original (raw text) file -- so go find it. Walk through the
11845  * offsets-list; the entry with the LOWEST end-of-doctored-buffer offset
11846  * exceeding the value of 'sso' IS the paragraph where we found the regex.
11847  */
11848  i = -1;
11849  j = -1;
11850  n = 0;
11851  while ((sp = listIterate(lp))) {
11852  if (sso > sp->bDocLen) {
11853  n = sp->bDocLen;
11854  continue;
11855  }
11856  i = sp->bStart;
11857  j = sp->bLen;
11858 #ifdef DEBUG
11859  printf("sso(%d), limit(%d), Possible: @%d+%d\n", sso,
11860  sp->bDocLen, i, j);
11861 #endif /* DEBUG */
11862  listIterationReset(lp);
11863  break;
11864  }
11865  if (i < 0) { /* something is wrong... */
11866  LOG_FATAL("Cannot map reduced-text to raw file contents (#%d)", index)
11867  Bail(-__LINE__);
11868  }
11869  /*
11870  * Remember, the length of text matched in the doctored-buffer will likely
11871  * not match the length of the "same" (unmodified) text in the raw file!
11872  * And, an offset within the doctored buffer CANNOT be any larger than the
11873  * corresponding text segment in the raw file (we only _remove_ characters).
11874  * Next, find the last occurrence (in the raw file) of the last word in
11875  * the license-footprint
11876  */
11877  sso -= n;
11878  seo -= n;
11879  off = i + sso;
11880  len = j - sso;
11881 #ifdef DEBUG
11882  printf("WINDOW-first: offset %d, len %d\n", off, len);
11883 #endif /* DEBUG */
11884  /*printf("BUF: %s\n", sp->buf);*/
11885  start = _REGEX(index);
11886  cp = start + licSpec[index].text.csLen - 1; /* 'end' of regex */
11887 #ifdef DEBUG
11888  printf("EO-Regex, cp == '%c'\n", *cp);
11889 #endif /* DEBUG */
11890  n = 0;
11891  while (*cp == ' ') {
11892  cp--;
11893  }
11894  while ((n == 1) || ((cp != start) && (*cp != ' ') && (*cp != ')') &&
11895  (*cp != '}'))) {
11896  if (*cp == ']') {
11897  n = 1;
11898  } else if (*cp == '[') {
11899  n = 0;
11900  }
11901  if (cp == _REGEX(index)) {
11902  cp = ":no:match";
11903  break;
11904  }
11905  cp--;
11906  }
11907  if (*cp == ')') {
11908  cp--;
11909  n = 1;
11910  while (n) {
11911  if (*cp == '(') {
11912  n--;
11913  } else if (*cp == ')') {
11914  n++;
11915  }
11916  /*printf("'%c' -- n %d\n", *cp, n);*/
11917  if (cp != start) {
11918  cp--;
11919  }
11920  }
11921  while ((cp != start) && (*cp != ' ') && (*cp != '.') && (*cp != ')')
11922  && (*cp != ']') && (*cp != '}')) {
11923  /*printf("skip '%c'...\n", *cp);*/
11924  cp--;
11925  }
11926 #ifdef DEBUG
11927  printf("_END_@%ld '%c'\n", cp-_REGEX(index), *cp);
11928 #endif /* DEBUG */
11929  }
11930  if (cp != start) {
11931  if (*cp != '.') {
11932  cp++;
11933  }
11934  if ((*cp == '?') || (*cp == '+')) {
11935  cp++;
11936  }
11937  }
11938  ptr = sp->buf + sso;
11939  i = j = 0;
11940 #ifdef DEBUG
11941  printf("SEARCH @foot is now \"%s\"\n", cp);
11942 #endif /* DEBUG */
11943  while (strGrep(cp, ptr, REG_ICASE|REG_EXTENDED)) {
11944  i++;
11945  ptr += cur.regm.rm_eo;
11946  j += cur.regm.rm_eo;
11947 #ifdef DEBUG
11948  printf("Found match (%d bytes) @ offset %d (%d tot)\n",
11949  cur.regm.rm_eo - cur.regm.rm_so, cur.regm.rm_so, j);
11950 #endif /* DEBUG */
11951  }
11952 #ifdef DEBUG
11953  printf("Total # of matches == %d\n", i);
11954 #endif /* DEBUG */
11955  if (i && j) {
11956  len = j;
11957 #ifdef DEBUG
11958  printf("WINDOW-adjst: offset %d, len %d\n", off, len);
11959 #endif /* DEBUG */
11960  } else {
11961  Assert(NO, "Regex \"%s\" (foot-end) not in raw text", cp);
11962  }
11963  /*
11964  * Then, find the first occurrence (in the raw file) of the first word
11965  * in the license-footprint; the exception here is that if the "last word"
11966  * turned out to be the entire regex, then the "first word" will be, too.
11967  */
11968  if (cp != start) {
11969  cp = _REGEX(index);
11970  j = 1;
11971 #ifdef DEBUG
11972  printf("BO-Regex, cp == '%c'\n", *cp);
11973 #endif /* DEBUG */
11974  while (*cp == ' ') {
11975  cp++;
11976  }
11977  while (*cp && (*cp != ' ') && (*cp != '.') && (*cp != '(') &&
11978  (*cp != '{')) {
11979  if (*cp == '[') {
11980  if (*(cp + 1) == '^') {
11981  j = 0;
11982  }
11983  while (*cp && (*cp != ']')) {
11984  cp++;
11985  }
11986  if (*(cp+1) && (*(cp+1) == '?')) {
11987  cp++;
11988  }
11989  if (j) {
11990  cp++;
11991  break;
11992  }
11993  }
11994  cp++;
11995  }
11996  if (*cp == '(') {
11997  /*printf("Start@%d '%c'\n", cp-_REGEX(index), *cp);*/
11998  for (n = 1, cp++; n; cp++) {
11999  /*printf("... '%c'\n", *cp);*/
12000  if ((*cp == '(') && (*(cp-1) != '\\')) {
12001  n++;
12002  } else if ((*cp == ')') && (*(cp-1) != '\\')) {
12003  n--;
12004  }
12005  }
12006  while (*cp && (*cp != ' ') && (*cp != '.') && (*cp != '(') &&
12007  (*cp != '[')) {
12008  cp++;
12009  }
12010  /*printf("_END_@%d '%c'\n", cp-_REGEX(index), *cp);*/
12011  }
12012  if ((*cp == '?') ||
12013  (*cp == '+') ||
12014  ((*cp == '.') && (*(cp-1) == '\\'))) {
12015  cp++;
12016  }
12017  if (*cp) {
12018  save = *cp;
12019  *cp = NULL_CHAR;
12020 #ifdef DEBUG
12021  printf("SEARCH @head is now \"%s\"\n", _REGEX(index));
12022 #endif /* DEBUG */
12023  ptr = sp->buf+sso;
12024  if (strGrep(_REGEX(index), ptr,
12025  REG_ICASE|REG_EXTENDED)) {
12026  len -= cur.regm.rm_so;
12027  off += cur.regm.rm_so;
12028  } else {
12029  LOG_NOTICE("Regex \"%s\" (foot-start) not in raw text", _REGEX(index));
12030  }
12031  *cp = save; /* restore to original text */
12032  }
12033 #ifdef DEBUG
12034  else {
12035  LOG_NOTICE("Nothing to trim from the front (*cp == NULL)");
12036  }
12037 #endif /* DEBUG */
12038  }
12039 #ifdef DEBUG
12040  else {
12041  printf("Hey, last-word IS the entire regex!\n");
12042  }
12043 #endif /* DEBUG */
12044  saveRegexLocation(index, off, len, YES);
12045 #ifdef DEBUG
12046  printf("WINDOW-FINAL: offset %d, len %d\n", off, len);
12047 #endif /* DEBUG */
12048  /*
12049  * At this point, the window is as small as we can (reasonably) make it,
12050  * given that we mundged the original file-text and didn't make a complete
12051  * map of every character. The variable off contains the start of the
12052  * window (the absolute offset within the raw file) and the variable len
12053  * contains the length of the text window.
12054  *****
12055  * DON'T FORGET that some license-footprints are determined merely by
12056  * searching for a string in the raw-text file (calling idxGrep()), e.g.,
12057  * not using the doctored buffers. See fileHasPatt() for details.
12058  *****
12059  * And finally, note how the list of entries matched (in 'whereList') is
12060  * manipulated -- see the very bottom of "addRef()".
12061  */
12062  if ((off + len) > size) {
12063  LOG_FATAL("off %d + len %d (== %d) exceeds filesize %d!", off, len, off + len, size);
12064  Bail(-__LINE__);
12065  }
12066  return;
12067 }
12068 
12076 void saveRegexLocation(int index, int offset, int length, int saveCache)
12077 {
12078  item_t *ip;
12079  item_t *sp;
12080 
12081 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
12082  traceFunc("== saveRegexLocation(%d, %d, %d, %d)\n", index, offset, length,
12083  saveCache);
12084 #endif /* PROC_TRACE || PHRASE_DEBUG */
12085 
12086  (void) sprintf(name, "reg%04d", index);
12087  sp = listGetItem(&whereList, name);
12088  sp->bIndex = whereList.used;
12089  sp->bStart = offset;
12090  sp->bLen = length;
12091  if (saveCache) {
12092  ip = listGetItem(&whCacheList, name);
12093  ip->bIndex = index;
12094  ip->bStart = offset;
12095  ip->bLen = length;
12096  }
12097  return;
12098 }
12099 
12100 
12101 void saveUnclBufLocation(int bufNum)
12102 {
12103  item_t *p;
12104  item_t *bp;
12105  list_t *lp;
12106 
12107 #if defined(PROC_TRACE) || defined(PHRASE_DEBUG)
12108  traceFunc("== saveUnclBufLocation(%d, %d, %d, %d)\n", bufNum);
12109 #endif /* PROC_TRACE || PHRASE_DEBUG */
12110 
12111  listClear(&whereList, NO); /* empty all prior matches */
12112  p = listGetItem(&cur.offList, _REGEX(_LEGAL_first));
12113  lp = (list_t *) p->bList;
12114  (void) sprintf(name, "buf%05d", bufNum);
12115  p = listGetItem(lp, name);
12116  bp = listGetItem(&whereList, LS_UNCL);
12117  bp->bStart = p->bStart;
12118  bp->bLen = p->bLen;
12119  bp->bIndex = -1;
12120  return;
12121 }
12122 
12128 void addRef(char *str, int interest)
12129 {
12130  item_t *p;
12131  char *bp;
12132  char *sp = str;
12133  if(!(str && str[0]))
12134  return;
12135 
12136 #ifdef PROC_TRACE
12137  traceFunc("== addRef(\"%s\", %d)\n", str, interest);
12138 #endif /* PROC_TRACE */
12139 
12140 #if defined(DEBUG)
12141  listDump(&whereList, YES);
12142 #endif /* DEBUG */
12143  /*
12144  * Add this to the list of individual pieces found, and mark the license
12145  * to make generating a license-summary easier. The general strategy is
12146  * to COMPLETELY ignore anything NOT considered 'noteworthy'. So if the
12147  * license is noteworthy, we add one to the count, so that we can call
12148  * listCount() on the list to find if there's a 'real license' in here.
12149  * see makeLicenseSummary() in license.c for more details.
12150  *****
12151  * This little trick is also used in distroReport() and rawSourceReport(),
12152  * see report.c
12153  */
12154  if (str == NULL_STR) {
12155  Assert(YES, "license detected != NULL");
12156  }
12157  if (*str == NULL_CHAR) {
12158  Assert(YES, "license string not start with NULL");
12159  }
12160  bp = licStr+refOffset;
12161  *bp++ = ',';
12162  /*
12163  CDB - Opportunity for optimization via memcpy
12164  */
12165  while (*sp) {
12166  *bp++ = *sp++;
12167  }
12168  *bp = NULL_CHAR;
12169  refOffset = bp - licStr;
12170  /*
12171  * Stuff this license in to several lists:
12172  * - parseList is used to create a package "computed license summary"
12173  * - briefList is used to compute a "terse/brief" license summary
12174  */
12175  p = listGetItem(&cur.parseList, str);
12176  if (interest) {
12177  p->iFlag++;
12178  if (interest > IL_LOW) {
12179  p->iLevel = interest;
12180  }
12181  }
12182  if (interest > maxInterest) {
12183  maxInterest = interest;
12184  }
12185  if (lDiags && whereList.used) {
12186  int i = 0;
12187  listSort(&whereList, SORT_BY_COUNT_ASC);
12188  printf("WINDOW for \"%s\": ", str);
12189  while ((p = listIterate(&whereList))) {
12190  if (i++ > 0) {
12191  printf(", ");
12192  }
12193  printf("%d+%d", p->bStart, p->bLen);
12194  }
12195  printf("\n");
12196  }
12197  listClear(&whereList, NO);
12198 #ifdef DEBUG
12199  if (lDiags) {
12200  printf("++ \"%s\" [int=%d]\n", str, interest);
12201  }
12202 #endif /* DEBUG */
12203 
12204  addLicence(cur.theMatches,str);
12205 
12206  return;
12207 }
12208 
12214 int famOPENLDAP(char *filetext, int size, int isML, int isPS)
12215 {
12216  int ret = 0;
12217 
12218  if (lmem[_tOPENLDAP]) {
12219  if (INFILE(_TITLE_OPENLDAP25)) {
12220  INTERESTING("OLDAP-2.5");
12221  ret = 1;
12222  }
12223  else if (INFILE(_TITLE_OPENLDAP26)) {
12224  INTERESTING("OLDAP-2.6");
12225  ret = 1;
12226  }
12227  else if (INFILE(_TITLE_OPENLDAP27)) {
12228  INTERESTING("OLDAP-2.7");
12229  ret = 1;
12230  }
12231  else if (INFILE(_TITLE_OPENLDAP28)) {
12232  INTERESTING("OLDAP-2.8");
12233  ret = 1;
12234  }
12235  else if (INFILE(_TITLE_OPENLDAP201)) {
12236  INTERESTING("OLDAP-2.0.1");
12237  ret = 1;
12238  }
12239  else if (INFILE(_TITLE_OPENLDAP20)) {
12240  INTERESTING("OLDAP-2.0");
12241  ret = 1;
12242  }
12243  else if (INFILE(_TITLE_OPENLDAP21)) {
12244  INTERESTING("OLDAP-2.1");
12245  ret = 1;
12246  }
12247  else if (INFILE(_TITLE_OPENLDAP221) || INFILE(_SPDX_OLDAP_221)) {
12248  INTERESTING("OLDAP-2.2.1");
12249  ret = 1;
12250  }
12251  else if (INFILE(_TITLE_OPENLDAP222) || INFILE(_SPDX_OLDAP_222)) {
12252  INTERESTING("OLDAP-2.2.2");
12253  ret = 1;
12254  }
12255  else if (INFILE(_TITLE_OPENLDAP22)) {
12256  INTERESTING("OLDAP-2.2");
12257  ret = 1;
12258  }
12259  else if (INFILE(_TITLE_OPENLDAP11)) {
12260  INTERESTING("OLDAP-1.1");
12261  ret = 1;
12262  }
12263  else if (INFILE(_TITLE_OPENLDAP23)) {
12264  INTERESTING("OLDAP-2.3");
12265  ret = 1;
12266  }
12267  else if (INFILE(_TITLE_OPENLDAP24)) {
12268  INTERESTING("OLDAP-2.4");
12269  ret = 1;
12270  }
12271  else if (INFILE(_TITLE_OPENLDAP12)) {
12272  INTERESTING("OLDAP-1.2");
12273  ret = 1;
12274  }
12275  else if (INFILE(_TITLE_OPENLDAP13)) {
12276  INTERESTING("OLDAP-1.3");
12277  ret = 1;
12278  }
12279  else if (INFILE(_TITLE_OPENLDAP14)) {
12280  INTERESTING("OLDAP-1.4");
12281  ret = 1;
12282  }
12283  else if (INFILE(_CR_OPENLDAP) && INFILE(_TITLE_OPENLDAP)) {
12284  INTERESTING("OLDAP");
12285  ret = 1;
12286  }
12287  }
12288  lmem[_fOPENLDAP] = ret;
12289  return(ret);
12290 }
12291 
12292 
12316 int checkUnclassified(char *filetext, int size, int score,
12317  int isML, int isPS, int nw)
12318 {
12319  char *buf;
12320  char *curptr;
12321  char *cp;
12322  int m = 0;
12323 #ifdef UNKNOWN_CHECK_DEBUG
12324  int pNum = 0;
12325 #endif /* UNKNOWN_CHECK_DEBUG */
12326  int i = 0;
12327 
12328 #ifdef PROC_TRACE
12329  traceFunc("== checkUnclassified(%p, %d, %d, %d, %d, %d)\n", filetext,
12330  size, score, isML, isPS, nw);
12331 #endif /* PROC_TRACE */
12332 
12333  /*
12334  * Based on experience, this is a good place to look for false-positives:
12335  *****
12336  * Occasionally IETF documents (RFCs, technical descriptions and the like)
12337  * have enough text to trip the unclassified-license detector falsely.
12338  * As a first quick check, see if there's an IETF copyright in the file
12339  * and if so, avoid this (somewhat expensive) check.
12340  *****
12341  * The "Debian social contract" has some very legal-looking verbage, too.
12342  */
12343  if (mCR_IETF()) {
12344  return(0);
12345  }
12346  if (INFILE(_LT_DEB_CONTRACT) || INFILE(_LT_DEB_CONTRACTref)){
12347  INTERESTING("Debian-social-DFSG");
12348  return(0);
12349  }
12350  if (INFILE(_LT_TROLLTECH)) {
12351  return(1);
12352  }
12353 
12354  /*
12355  * A Generic EULA 'qualifies' as an UnclassifiedLicense, or the clause 'License agreement' as an UnclassifiedLicense, check this
12356  * one before trying the word-matching magic checks (below).
12357  */
12358  gl.flags |= FL_SAVEBASE; /* save match buffer (if any) */
12359  m = INFILE(_LT_GEN_EULA) || INFILE(_LT_LG) || INFILE(_LT_GENERIC_UNCLASSIFIED);
12360  /* gl.flags & ~FL_SAVEBASE; CDB -- This makes no sense, given line above */
12361  if (m) {
12362  if (cur.licPara == NULL_STR && cur.matchBase) {
12363  saveLicenseParagraph(cur.matchBase, isML, isPS, NO);
12364  }
12365  return(1);
12366  }
12367  checknw = nw;
12368  /*
12369  * Look for paragraphs of text that could be licenses. We'll check the
12370  * resulting text for 4 types of different words (all in proximity leads
12371  * us to believe it's a license of some sort). If we don't get a paragraph
12372  * to search based on the first set of words, look no further.
12373  */
12374 #ifdef UNKNOWN_CHECK_DEBUG
12375  printf("... first regex: \"%s\"\n", _REGEX(_LEGAL_first));
12376 #endif /* UNKNOWN_CHECK_DEBUG */
12377  if ((buf = getInstances(filetext, size, gl.uPsize, gl.uPsize,
12378  _REGEX(_LEGAL_first), YES)) == NULL_STR) {
12379 #ifdef UNKNOWN_CHECK_DEBUG
12380  printf("... getInstances returns NULL\n");
12381 #endif /* UNKNOWN_CHECK_DEBUG */
12382  return(0);
12383  }
12384  if (lDiags) {
12385  printRegexMatch(_LEGAL_first, NO);
12386  }
12387  /*
12388  * Without examining each paragraph, make sure the file contains the
12389  * components we're looking for... if not, don't check any further.
12390  */
12391  if (/*size > 102400 && */
12392  !match3(_LEGAL_first, buf, score, NO, isML, isPS)) {
12393 #ifdef UNKNOWN_CHECK_DEBUG
12394  printf("... first check fails\n");
12395 #endif /* UNKNOWN_CHECK_DEBUG */
12396  return(0);
12397  }
12398  /*
12399  * buf now points to a series of paragraphs that have 6 lines above
12400  * AND below the regex we've matched, PLUS a separator line between
12401  * each paragraph. The LAST paragraph doesn't have a separator-line.
12402  *****
12403  * For the sake of the search, make the separator line 'disappear'.
12404  */
12405  curptr = buf;
12406  while (idxGrep(_UTIL_XYZZY, curptr, 0)) {
12407  cp = curptr + cur.regm.rm_so;
12408  *cp = NULL_CHAR;
12409 #ifdef UNKNOWN_CHECK_DEBUG
12410  printf("DEBUG: paragraph #%d:\n[START-PARA]\n%s\n[END-PARA]\n",
12411  ++pNum, curptr);
12412 #endif /* UNKNOWN_CHECK_DEBUG */
12413  i++;
12414  /*
12415  * Now that we have our 'paragraph span', check the contents of the
12416  * paragraph for the other 3 groups of words. A match in EACH group
12417  * (plus other criteria checked, of course) means we've likely found
12418  * as-of-yet unclassified license.
12419  *****
12420  * A generic "no warranty" paragraph also looks like a license, so in
12421  * that case don't return a false positive.
12422  */
12423  if (match3(_LEGAL_first, curptr, score, YES, isML, isPS)) {
12424  saveUnclBufLocation(i);
12425  return(1);
12426  }
12427 #ifdef UNKNOWN_CHECK_DEBUG
12428  else {
12429  printf("DEBUG: match() returns 0, look again\n");
12430  }
12431 #endif /* UNKNOWN_CHECK_DEBUG */
12432  /*
12433  * NO-match means this paragraph doesn't contain the magic words we
12434  * seek. However, this file still _may_ contain the magic paragraph --
12435  * it'll be searched in this while-loop until either the magic OR
12436  * end-of-file is found)...
12437  */
12438  *cp++ = '='; /* reset line */
12439  if ((cp = findEol(cp)) == NULL_STR) {
12440  LOG_FATAL("Cannot find delimeter!")
12441  Bail(-__LINE__);
12442  }
12443  curptr = cp+1;
12444  }
12445  /*
12446  * One last buffer to try...
12447  */
12448 #ifdef UNKNOWN_CHECK_DEBUG
12449  printf("DEBUG: %s paragraph (#%d):\n[START-PARA]\n%s\n[END-PARA]\n",
12450  pNum == 0 ? "ONLY" : "LAST", ++pNum, curptr);
12451 #endif /* UNKNOWN_CHECK_DEBUG */
12452  if (match3(_LEGAL_first, curptr, score, YES, isML, isPS)) {
12453  saveUnclBufLocation(++i);
12454  return(1);
12455  }
12456  return(0);
12457 }
12458 
12459 
12463 void checkFileReferences(char *filetext, int size, int score, int kwbm,
12464  int isML, int isPS)
12465 {
12466  int i;
12467 
12468 #ifdef PROC_TRACE
12469  traceFunc("== checkFileReferences(%p, %d, %d, 0x%x, %d, %d)\n", filetext,
12470  size, score, kwbm, isML, isPS);
12471 #endif /* PROC_TRACE */
12472  for (i = 0; i < NSEECOPYING; i++) {
12473  if (INFILE(_SEECOPYING_first+i)) {
12474  if (lDebug) {
12475  (void) sprintf(name, "Gen-CPY-%d", ++i);
12476  INTERESTING(name);
12477  } else {
12478  INTERESTING("See-file.COPYING");
12479  }
12480  return;
12481  }
12482  }
12483  /* */
12484  for (i = 0; i < NSEELICENSE; i++) {
12485  if (INFILE(_SEELICENSE_first+i)) {
12486  if (lDebug) {
12487  (void) sprintf(name, "Gen-CPY-%d", ++i);
12488  INTERESTING(name);
12489  } else {
12490  INTERESTING("See-file.LICENSE");
12491  }
12492  return;
12493  }
12494  }
12495  /* */
12496  for (i = 0; i < NSEEREADME; i++) {
12497  if (INFILE(_SEEREADME_first+i)) {
12498  if (lDebug) {
12499  (void) sprintf(name, "Gen-CPY-%d", ++i);
12500  INTERESTING(name);
12501  } else {
12502  INTERESTING("See-file.README");
12503  }
12504  return;
12505  }
12506  }
12507  /* */
12508  for (i = 0; i < NSEEOTHER; i++) {
12509  if (INFILE(_SEEOTHER_first+i)) {
12510  if (lDebug) {
12511  (void) sprintf(name, "Gen-CPY-%d", ++i);
12512  INTERESTING(name);
12513  } else {
12514  INTERESTING("See-doc.OTHER");
12515  }
12516  return;
12517  }
12518  }
12519  /* */
12520  if (INFILE(_LT_SEE_OUTPUT_1)) {
12521  INTERESTING(lDebug ? "Gen-EXC-1" : "GNU-style.EXECUTE");
12522  }
12523 #if 0
12524  else if (INFILE(_LT_SEE_OUTPUT_2)) {
12525  INTERESTING(lDebug ? "Gen-EXC-2" : "Free-SW.run-COMMAND");
12526  } else if (INFILE(_LT_SEE_OUTPUT_3)) {
12527  INTERESTING(lDebug ? "Gen-EXC-3" : "Free-SW.run-COMMAND");
12528  }
12529 #endif
12530  if(HASTEXT(_LT_SEE_COPYING_LICENSE_1, REG_EXTENDED) || HASTEXT(_LT_SEE_COPYING_LICENSE_2, REG_EXTENDED)) {
12531  INTERESTING("See-file");
12532  }
12533  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)) {
12534  INTERESTING("See-URL");
12535  }
12536  return;
12537 
12538 #ifdef OLD_VERSION
12539  if (INFILE(_LT_SEE_COPYING_1)) {
12540  INTERESTING(lDebug ? "Gen-CPY-1" : "See-file.COPYING");
12541  }
12542  else if (INFILE(_LT_SEE_COPYING_2)) {
12543  INTERESTING(lDebug ? "Gen-CPY-2" : "See-file.COPYING");
12544  }
12545  else if (INFILE(_LT_SEE_COPYING_3)) {
12546  INTERESTING(lDebug ? "Gen-CPY-3" : "See-file.COPYING");
12547  }
12548  else if (INFILE(_LT_SEE_COPYING_4)) {
12549  INTERESTING(lDebug ? "Gen-CPY-4" : "See-file.COPYING");
12550  }
12551  else if (INFILE(_LT_SEE_COPYING_5)) {
12552  INTERESTING(lDebug ? "Gen-CPY-5" : "See-file.COPYING");
12553  }
12554  else if (INFILE(_LT_SEE_COPYING_6)) {
12555  INTERESTING(lDebug ? "Gen-CPY-6" : "See-file.COPYING");
12556  }
12557  else if (INFILE(_LT_SEE_COPYING_7)) {
12558  INTERESTING(lDebug ? "Gen-CPY-7" : "See-file.COPYING");
12559  }
12560  else if (INFILE(_LT_SEE_COPYING_8)) {
12561  INTERESTING(lDebug ? "Gen-CPY-8" : "See-file.COPYING");
12562  }
12563  else if (INFILE(_LT_SEE_COPYING_9)) {
12564  INTERESTING(lDebug ? "Gen-CPY-9" : "See-file.COPYING");
12565  }
12566  else if (INFILE(_LT_SEE_COPYING_10)) {
12567  INTERESTING(lDebug ? "Gen-CPY-10" : "See-file.COPYING");
12568  }
12569  else if (INFILE(_LT_SEE_COPYING_LAST1)) {
12570  INTERESTING(lDebug ? "Gen-CPY-L1" : "See-file.COPYING");
12571  }
12572  else if (INFILE(_LT_SEE_COPYING_LAST2)) {
12573  INTERESTING(lDebug ? "Gen-CPY-L2" : "See-file.COPYING");
12574  }
12575  else if (INFILE(_LT_SEE_LICENSE_1)) {
12576  INTERESTING(lDebug ? "Gen-LIC-1" : "See-file.LICENSE");
12577  }
12578  else if (INFILE(_LT_SEE_LICENSE_2)) {
12579  INTERESTING(lDebug ? "Gen-LIC-2" : "See-file.LICENSE");
12580  }
12581  else if (INFILE(_LT_SEE_LICENSE_3)) {
12582  INTERESTING(lDebug ? "Gen-LIC-3" : "See-file.LICENSE");
12583  }
12584  else if (INFILE(_LT_SEE_LICENSE_4)) {
12585  INTERESTING(lDebug ? "Gen-LIC-4" : "See-file.LICENSE");
12586  }
12587  else if (INFILE(_LT_SEE_LICENSE_5)) {
12588  INTERESTING(lDebug ? "Gen-LIC-5" : "See-file.LICENSE");
12589  }
12590  else if (INFILE(_LT_SEE_LICENSE_6)) {
12591  INTERESTING(lDebug ? "Gen-LIC-6" : "See-file.LICENSE");
12592  }
12593  else if (INFILE(_LT_SEE_LICENSE_7)) {
12594  INTERESTING(lDebug ? "Gen-LIC-7" : "See-file.LICENSE");
12595  }
12596  else if (INFILE(_LT_SEE_LICENSE_8)) {
12597  INTERESTING(lDebug ? "Gen-LIC-8" : "See-file.LICENSE");
12598  }
12599  else if (INFILE(_LT_SEE_LICENSE_9)) {
12600  INTERESTING(lDebug ? "Gen-LIC-9" : "See-file.LICENSE");
12601  }
12602  else if (INFILE(_LT_SEE_LICENSE_10)) {
12603  INTERESTING(lDebug ? "Gen-LIC-10" : "See-file.LICENSE");
12604  }
12605  else if (INFILE(_LT_SEE_LICENSE_LAST1)) {
12606  INTERESTING(lDebug ? "Gen-LIC-L1" : "See-file.LICENSE");
12607  }
12608  else if (INFILE(_LT_SEE_LICENSE_LAST2)) {
12609  INTERESTING(lDebug ? "Gen-LIC-L2" : "See-file.LICENSE");
12610  }
12611  else if (INFILE(_LT_SEE_README_1)) {
12612  INTERESTING(lDebug ? "Gen-RDM-1" : "See-file.README");
12613  }
12614  else if (INFILE(_LT_SEE_README_2)) {
12615  INTERESTING(lDebug ? "Gen-RDM-2" : "See-file.README");
12616  }
12617  else if (INFILE(_LT_SEE_README_3)) {
12618  INTERESTING(lDebug ? "Gen-RDM-3" : "See-file.README");
12619  }
12620  else if (INFILE(_LT_SEE_README_4)) {
12621  INTERESTING(lDebug ? "Gen-RDM-4" : "See-file.README");
12622  }
12623  else if (INFILE(_LT_SEE_README_5)) {
12624  INTERESTING(lDebug ? "Gen-RDM-5" : "See-file.README");
12625  }
12626  else if (INFILE(_LT_SEE_README_6)) {
12627  INTERESTING(lDebug ? "Gen-RDM-6" : "See-file.README");
12628  }
12629  else if (INFILE(_LT_SEE_README_7)) {
12630  INTERESTING(lDebug ? "Gen-RDM-7" : "See-file.README");
12631  }
12632  else if (INFILE(_LT_SEE_README_LAST1)) {
12633  INTERESTING(lDebug ? "Gen-RDM-L1" : "See-file.README");
12634  }
12635  else if (INFILE(_LT_SEE_README_LAST2)) {
12636  INTERESTING(lDebug ? "Gen-RDM-L2" : "See-file.README");
12637  }
12638  else if (INFILE(_LT_SEE_OTHER_1)) {
12639  INTERESTING(lDebug ? "Gen-OTH-1" : "See-doc.OTHER");
12640  }
12641  else if (INFILE(_LT_SEE_OTHER_2)) {
12642  INTERESTING(lDebug ? "Gen-OTH-2" : "See-doc.OTHER");
12643  }
12644  else if (INFILE(_LT_SEE_OTHER_3)) {
12645  INTERESTING(lDebug ? "Gen-OTH-3" : "See-doc.OTHER");
12646  }
12647  else if (INFILE(_LT_SEE_OTHER_4)) {
12648  INTERESTING(lDebug ? "Gen-OTH-4" : "See-doc.OTHER");
12649  }
12650  else if (INFILE(_LT_SEE_OTHER_5)) {
12651  INTERESTING(lDebug ? "Gen-OTH-5" : "See-doc.OTHER");
12652  }
12653  else if (INFILE(_LT_SEE_OTHER_6)) {
12654  INTERESTING(lDebug ? "Gen-OTH-6" : "See-doc.OTHER");
12655  }
12656  else if (INFILE(_LT_SEE_OTHER_7)) {
12657  INTERESTING(lDebug ? "Gen-OTH-7" : "See-doc.OTHER");
12658  }
12659  else if (INFILE(_LT_SEE_OTHER_8)) {
12660  INTERESTING(lDebug ? "Gen-OTH-8" : "See-doc.OTHER");
12661  }
12662  else if (INFILE(_LT_SEE_OTHER_9)) {
12663  INTERESTING(lDebug ? "Gen-OTH-9" : "See-doc.OTHER");
12664  }
12665  else if (INFILE(_LT_SEE_OTHER_10)) {
12666  INTERESTING(lDebug ? "Gen-OTH-10" : "See-doc.OTHER");
12667  }
12668  else if (INFILE(_LT_SEE_OTHER_11)) {
12669  INTERESTING(lDebug ? "Gen-OTH-11" : "See-doc.OTHER");
12670  }
12671  else if (INFILE(_LT_SEE_OTHER_12)) {
12672  INTERESTING(lDebug ? "Gen-OTH-12" : "See-doc.OTHER");
12673  }
12674  else if (INFILE(_LT_SEE_OTHER_13)) {
12675  INTERESTING(lDebug ? "Gen-OTH-13" : "See-doc.OTHER");
12676  }
12677  else if (INFILE(_LT_SEE_OTHER_14)) {
12678  INTERESTING(lDebug ? "Gen-OTH-14" : "See-doc.OTHER");
12679  }
12680  else if (INFILE(_LT_SEE_OTHER_15)) {
12681  INTERESTING(lDebug ? "Gen-OTH-15" : "See-doc.OTHER");
12682  }
12683  else if (INFILE(_LT_SEE_OTHER_LAST1)) {
12684  INTERESTING(lDebug ? "Gen-OTH-L1" : "See-doc.OTHER");
12685  }
12686  else if (INFILE(_LT_SEE_OTHER_LAST2)) {
12687  INTERESTING(lDebug ? "Gen-OTH-L2" : "See-doc.OTHER");
12688  }
12689  else if (INFILE(_LT_SEE_OTHER_LAST3)) {
12690  INTERESTING(lDebug ? "Gen-OTH-L3" : "See-doc.OTHER");
12691  }
12692  else if (INFILE(_LT_SEE_OUTPUT_1)) {
12693  INTERESTING(lDebug ? "Gen-EXC-1" : "GNU-style.interactive");
12694  }
12695  return;
12696 #endif /* OLD_VERSION */
12697 }
12698 
12699 
12700 int checkPublicDomain(char *filetext, int size, int score, int kwbm,
12701  int isML, int isPS)
12702 {
12703  int ret;
12704 
12705 #ifdef PROC_TRACE
12706  traceFunc("== checkPublicDomain(%p, %d, %d, 0x%x, %d, %d)\n", filetext,
12707  size, score, kwbm, isML, isPS);
12708 #endif /* PROC_TRACE */
12709 
12710  if (pd >= 0) { /* already tried? */
12711  return(pd);
12712  }
12713  ret = 0; /* default answer is "no" */
12714  if (INFILE(_LT_PUBDOM_CC)) {
12715  INTERESTING(lDebug ? "Pubdom(CC)" : "CC-PDDC");
12716  ret = 1;
12717  } else if (INFILE(_LT_PUBDOM_ODC)) {
12718  INTERESTING(lDebug ? "Pubdom(ODC)" : LS_PD_CLM);
12719  ret = 1;
12720  } else if (INFILE(_LT_PUBDOM_PDD)) {
12721  INTERESTING(lDebug ? "Pubdom(PDD)" : LS_PD_CLM);
12722  ret = 1;
12723  } else if (INFILE(_LT_PUBDOM_USE)) {
12724  INTERESTING(lDebug ? "Pubdom(use)" : LS_PD_CLM);
12725  ret = 1;
12726  } else if (HASTEXT(_LT_PUBDOM_NOTclaim, REG_EXTENDED)) {
12727  INTERESTING(LS_NOT_PD);
12728  ret = 1;
12729  } else if (INFILE(_CR_PUBDOM)) {
12730  if (INFILE(_LT_PUBDOMNOTcpyrt)) {
12731  INTERESTING(LS_PD_CLM);
12732  } else {
12733  INTERESTING(LS_PD_CPRT);
12734  }
12735  ret = 1;
12736  } else if (INFILE(_CR_NONE)) {
12737  INTERESTING(lDebug ? "Pubdom(no-CR)" : LS_PD_CLM);
12738  ret = 1;
12739  } else if (INFILE(_LT_UNLIN) || URL_INFILE(_URL_UNLINref) || URL_INFILE(_URL_UNLIN)) {
12740  INTERESTING("Unlicense");
12741  ret = 1;
12742  } else if (INFILE(_LT_PUBDOM_1)) {
12743  INTERESTING(lDebug ? "Pubdom(1)" : LS_PD_CLM);
12744  ret = 1;
12745  } else if (INFILE(_LT_PUBDOM_2) && NOT_INFILE(_PHR_PUBLIC_FUNCT) && NOT_INFILE(_LT_NOTPUBDOM_1)) {
12746  INTERESTING(lDebug ? "Pubdom(2)" : LS_PD_CLM);
12747  ret = 1;
12748  } else if (INFILE(_LT_PUBDOM_3)) {
12749  INTERESTING(lDebug ? "Pubdom(3)" : LS_PD_CLM);
12750  ret = 1;
12751 #ifdef REMOVED_AS_TOO_BROAD
12752  } else if (INFILE(_LT_PUBDOM_4)) {
12753  INTERESTING(lDebug ? "Pubdom(4)" : LS_PD_CLM);
12754  ret = 1;
12755  } else if (INFILE(_LT_PUBDOM_5)) {
12756  INTERESTING(lDebug ? "Pubdom(5)" : LS_PD_CLM);
12757  ret = 1;
12758  } else if (INFILE(_LT_PUBDOM_6)) {
12759  INTERESTING(lDebug ? "No-more-copyright" : LS_PD_CLM);
12760  ret = 1;
12761 #endif // done removing too broad signatures
12762  } else if (INFILE(_LT_PUBDOM_7)) {
12763  INTERESTING(lDebug ? "Pubdom(7)" : LS_PD_CLM);
12764  ret = 1;
12765  } else if (INFILE(_LT_PUBDOM_8)) {
12766  INTERESTING(lDebug ? "Pubdom(8)" : LS_PD_CLM);
12767  ret = 1;
12768  } else if (INFILE(_LT_PUBDOM_9)) {
12769  INTERESTING(lDebug ? "Pubdom(9)" : LS_PD_CLM);
12770  ret = 1;
12771  } else if (INFILE(_LT_PUBDOM_10)) {
12772  if (INFILE(_LT_blessing)) {
12773  INTERESTING(lDebug ? "Pubdom(10)" : "blessing");
12774  }
12775  else {
12776  INTERESTING(lDebug ? "Pubdom(10)" : LS_PD_CLM);
12777  }
12778  ret = 1;
12779  } else if (INFILE(_URL_PUBDOM)) {
12780  INTERESTING(lDebug ? "Pubdom(URL)" : LS_PD_CLM);
12781  ret = 1;
12782  } else if (HASKW(kwbm, _KW_public_domain) && score <= 3) {
12783  INTERESTING(LS_PD_ONLY);
12784  ret = 1;
12785  }
12786  return(ret);
12787 }
12788 
12789 
12797 void checkCornerCases(char *filetext, int size, int score,
12798  int kwbm, int isML, int isPS, int nw, int force)
12799 {
12800 
12801 #ifdef PROC_TRACE
12802  traceFunc("== checkCornerCases(%p, %d, %d, %d, %d, %d, %d, %d)\n",
12803  filetext, size, score, kwbm, isML, isPS, nw, force);
12804 #endif /* PROC_TRACE */
12805 
12806  if (crCheck++) { /* only need to check this once */
12807  return;
12808  }
12809  if (INFILE(_LT_NOTATT_NOTBSD)) {
12810  LOWINTEREST("non-ATT-BSD");
12811  }
12812 
12813  /*
12814  * FINAL cases: (close to giving up) -- lowest-importance items
12815  */
12822  /*
12823  if (!(*licStr)) {
12824  if (HASTEXT(_TEXT_TRADEMARK, 0)) {
12825  LOWINTEREST(LS_TDMKONLY);
12826  }
12827  }
12828  */
12829  if (!(*licStr)) {
12830  /*
12831  * We may have matched something but ultimately determined there's nothing
12832  * significant or of any interest, so empty the list of any matches we may
12833  * have observed to this point.
12834  */
12835  listClear(&whereList, NO); /* force 'nothing to report' */
12836  }
12837  return;
12838 }
12839 
12840 int match3(int base, char *buf, int score, int save, int isML, int isPS)
12841 {
12842  int i;
12843  int j;
12844  char *cp;
12845  /* */
12846 #ifdef PROC_TRACE
12847 #ifdef PROC_TRACE_SWITCH
12848  if (gl.ptswitch)
12849 #endif /* PROC_TRACE_SWITCH */
12850  printf("== match3(%d, %p, %d, %d, %d, %d)\n", base, buf, score, save,
12851  isML, isPS);
12852 #else /* not PROC_TRACE */
12853 #ifdef UNKNOWN_CHECK_DEBUG
12854  printf("== match3(%d, %p, %d, %d, %d, %d)\n", base, buf, score, save,
12855  isML, isPS);
12856 #endif /* UNKNOWN_CHECK_DEBUG */
12857 #endif /* not PROC_TRACE */
12858  /* */
12859  for (i = 1; i <= 3; i++) {
12860  if (dbgIdxGrep(base+i, buf, (save && lDiags)) == 0) {
12861 #ifdef UNKNOWN_CHECK_DEBUG
12862  printf("match3: FAILED regex (%d)!\n", base+i);
12863 #endif /* UNKNOWN_CHECK_DEBUG */
12864  return(0);
12865  }
12866  }
12867 #ifdef UNKNOWN_CHECK_DEBUG
12868  printf("match3: Success (%s)!\n",
12869  (save ? "buffer-for-real" : "file-initial-check"));
12870 #endif /* UNKNOWN_CHECK_DEBUG */
12871  /*
12872  * Some "possible licenses" are technical descriptions that share some words
12873  * that typically appear in licenses (distribution, terms, permission(s)).
12874  *****
12875  * If we're checking a paragraph (e.g., "save" is non-zero), see if there are
12876  * other engineering-development-technical terms in the paragraph that tend
12877  * to NOT be present in licenses...
12878  */
12879  if (save) {
12880  for (j = i = 0, cp = buf; *cp; i++, cp++) {
12881  if (*cp & 0200) {
12882  j++;
12883  }
12884  }
12885 #ifdef UNKNOWN_CHECK_DEBUG
12886  printf("DEEBUG: %d bytes, %d 8-bit\n", i, j);
12887 #endif /* UNKNOWN_CHECK_DEBUG */
12888  if (j >= (i/2)) {
12889  if (lDiags) {
12890  printf("... no, >= 50 percent 8-bit characters\n");
12891  }
12892  return(0);
12893  }
12894  /*
12895  We need to allocate space for a doctored-up version of the candidate
12896  unknown-license paragraph, but it's ONLY used in this function. E.g.,
12897  make darn sure we free it up before exiting this function...
12898  */
12899  cp = copyString(buf, MTAG_TEXTPARA);
12900  doctorBuffer(cp, isML, isPS, NO);
12901  /*
12902  If we detected a no-warraty statement earlier, "checknw" is != 0.
12903  Look for a no-warrany statement in this candidate paragraph.
12904  If we find it, report failure for the paragraph and remember
12905  finding the no--warranty.
12906  */
12907  if (checknw && !idxGrep(checknw, cp, REG_ICASE|REG_EXTENDED)) {
12908  if (lDiags) {
12909  printf("... no, warranty regex %d\n", checknw);
12910  }
12911  checknw = 0;
12912  memFree(cp, MTAG_TEXTPARA);
12913  return(0);
12914  }
12915  /*
12916  False-positive-check: GNU/FSF template (often see in ".po"
12917  and ".c" files
12918 
12919  "This file is distributed under the same license as the
12920  package PACKAGE"
12921  */
12922  if (dbgIdxGrep(_LT_BOGUSTMPL, cp, lDiags)) {
12923  if (lDiags) {
12924  printf("... no, FSF-GNU template\n");
12925  }
12926  memFree(cp, MTAG_TEXTPARA);
12927  return(0);
12928  }
12929  /*
12930  * False-positive-check: GNU GPL preamble statements; these have been
12931  * "sprinkled" throughout files seen before, so check ALL of them.
12932  */
12933  if (dbgIdxGrep(_PHR_GNU_FREEDOM, cp, lDiags) ||
12934  dbgIdxGrep(_PHR_GNU_COPYING, cp, lDiags) ||
12935  dbgIdxGrep(_PHR_GNU_PROTECT, cp, lDiags)) {
12936  if (lDiags) {
12937  printf("... no, GNU-GPL preamble\n");
12938  }
12939  memFree(cp, MTAG_TEXTPARA);
12940  return(0);
12941  }
12942  if (lDiags) {
12943  printf("... candidate paragraph analysis:\n");
12944  }
12945  for (i = j = 0; i < NKEYWORDS; i++) {
12946  if (idxGrep_recordPositionDoctored(i + _KW_first, cp, REG_EXTENDED | REG_ICASE)) {
12947  if (lDiags) {
12948  printf("%s", j ? ", " : "KEYWORDS: ");
12949  printf("%s", _REGEX(i+_KW_first));
12950  }
12951  j++;
12952  }
12953  }
12954  if (lDiags) {
12955  if (j) {
12956  printf("\n");
12957  }
12958  printf("SCORES: para %d, file %d == %05.2f%% ", j,
12959  score, 100.0 * (float) j / (float) score);
12960  }
12961  /*
12962  Here, we guess that an UnclassifiedLicense exists in a paragraph
12963  when:
12964  + a paragraph has a keyword-score of at least 3 -OR-
12965  + ... a keyword-score of 2 *AND* is >= 50% of the file's
12966  total score
12967 
12968  It's likely we'll see a few false-positives with a
12969  keyword-score of 2 but there are cases where this works.
12970  We can filter out the 2-scores we see
12971  with the FILTER checks below...
12972  */
12973  if (j == 0) { /* no license-like keywords */
12974  if (lDiags) {
12975  printf("(ZERO legal keywords)\n");
12976  }
12977  memFree(cp, MTAG_TEXTPARA);
12978  return(0);
12979  }
12980  if (j >= 3 || (j == 2 && j*2 >= score)) {
12981  if (j >= 3 && lDiags) {
12982  printf("(LIKELY: para-score >= 2)\n");
12983  }
12984  else if (lDiags) {
12985  printf("(MAYBE: local percentage)\n");
12986  }
12987  }
12988  else {
12989  if (lDiags) {
12990  printf("(NOT LIKELY a license)\n");
12991 #if 0
12992 #endif
12993  printf("[FAILED]\n%s\n[/FAILED]\n", buf);
12994  }
12995  memFree(cp, MTAG_TEXTPARA);
12996  return(0);
12997  }
12998  /*
12999  Sure, there ARE paragraphs with these words that do NOT constitute a
13000  real license. Look for key words and phrases of them HERE. This list
13001  of filters will likely grow over time.
13002  */
13003  for (i = 0; i < NFILTER; i++) {
13004  if (dbgIdxGrep(_FILTER_first+i, buf, lDiags)) {
13005  if (lDiags) {
13006  printf("!! NO-LIC: filter %d\n", ++i);
13007  }
13008  memFree(cp, MTAG_TEXTPARA);
13009  return(0);
13010  }
13011  }
13012  if (cur.licPara == NULL_STR) {
13013  saveLicenseParagraph(buf, isML, isPS, YES);
13014  }
13015  memFree(cp, MTAG_TEXTPARA);
13016  }
13017 #ifdef UNKNOWN_CHECK_DEBUG
13018  else {
13019  printf("match3: Initial-check only (save == %d)\n", save);
13020  }
13021 #endif /* UNKNOWN_CHECK_DEBUG */
13022  return(1);
13023 }
13024 
13025 void saveLicenseParagraph(char *mtext, int isML, int isPS, int entireBuf)
13026 {
13027  char *cp;
13028  char *start;
13029  int index=0;
13030  int len;
13031  start = copyString(mtext, MTAG_TEXTPARA);
13032  if(!start)
13033  {
13034  LOG_FATAL("called saveLicenseParagraph without text")
13035  Bail(-__LINE__);
13036  }
13037 #ifdef PROC_TRACE
13038 #ifdef PROC_TRACE_SWITCH
13039  if (gl.ptswitch)
13040 #endif /* PROC_TRACE_SWITCH */
13041  printf("== saveLicenseParagraph(%p, %d, %d, %d)\n", mtext, isML, isPS, entireBuf);
13042 #endif /* PROC_TRACE */
13043  /* */
13044  if (entireBuf) {
13045  cur.licPara = copyString(mtext, MTAG_TEXTPARA);
13046  } else {
13047  if (cur.regm.rm_so < 50) {
13048  len = cur.regm.rm_eo + 80;
13049  } else {
13050  len = cur.regm.rm_eo + 130 - cur.regm.rm_so;
13051  index = cur.regm.rm_so - 50;
13052  }
13053  cur.licPara = memAlloc(len + 9, MTAG_TEXTPARA);
13054  (void) strcpy(cur.licPara, "... ");
13055  (void) strncpy(cur.licPara + 4, start + index, len);
13056  (void) strcpy(cur.licPara + len + 4, " ...");
13057  memFree(start, MTAG_TEXTPARA);
13058  }
13059 
13060  /*
13061  * Convert double-line-feed chars ("\r" and "\n" combos) to a single "\n"
13062  */
13063  for (cp = cur.licPara; *cp; cp++) {
13064  if ((*cp == '\n' || *cp == '\r') &&
13065  (*(cp+1) == '\r' || *(cp+1) == '\n')) {
13066  *cp = ' ';
13067  *(cp+1) = '\n';
13068  }
13069  }
13070  if (lDiags) {
13071  printf("[PERHAPS] (%p)\n%s\n[/PERHAPS]\n", cur.licPara, cur.licPara);
13072  }
13073  return;
13074 }
13075 
13084 void spdxReference(char *filetext, int size, int isML, int isPS)
13085 {
13086  if (INFILE(_SPDX_Glide)) {
13087  INTERESTING("Glide");
13088  }
13089  if (INFILE(_SPDX_Abstyles)) {
13090  INTERESTING("Abstyles");
13091  }
13092  if (INFILE(_SPDX_AFL_11)) {
13093  INTERESTING("AFL-1.1");
13094  }
13095  if (INFILE(_SPDX_AFL_12)) {
13096  INTERESTING("AFL-1.2");
13097  }
13098  if (INFILE(_SPDX_AFL_20)) {
13099  INTERESTING("AFL-2.0");
13100  }
13101  if (INFILE(_SPDX_AFL_21)) {
13102  INTERESTING("AFL-2.1");
13103  }
13104  if (INFILE(_SPDX_AFL_30)) {
13105  INTERESTING("AFL-3.0");
13106  }
13107  if (INFILE(_SPDX_AMPAS)) {
13108  INTERESTING("AMPAS");
13109  }
13110  if (INFILE(_SPDX_APL_10)) {
13111  INTERESTING("APL-1.0");
13112  }
13113  if (INFILE(_SPDX_Adobe_Glyph)) {
13114  INTERESTING("Adobe-Glyph");
13115  }
13116  if (INFILE(_SPDX_APAFML)) {
13117  INTERESTING("APAFML");
13118  }
13119  if (INFILE(_SPDX_Adobe_2006)) {
13120  INTERESTING("Adobe-2006");
13121  }
13122  if (INFILE(_SPDX_Afmparse)) {
13123  INTERESTING("Afmparse");
13124  }
13125  if (INFILE(_SPDX_Aladdin)) {
13126  INTERESTING("Aladdin");
13127  }
13128  if (INFILE(_SPDX_ADSL)) {
13129  INTERESTING("ADSL");
13130  }
13131  if (INFILE(_SPDX_AMDPLPA)) {
13132  INTERESTING("AMDPLPA");
13133  }
13134  if (INFILE(_SPDX_ANTLR_PD)) {
13135  INTERESTING("ANTLR-PD");
13136  }
13137  if (INFILE(_SPDX_AML)) {
13138  INTERESTING("AML");
13139  }
13140  if (INFILE(_SPDX_APSL_10)) {
13141  INTERESTING("APSL-1.0");
13142  }
13143  if (INFILE(_SPDX_APSL_11)) {
13144  INTERESTING("APSL-1.1");
13145  }
13146  if (INFILE(_SPDX_APSL_12)) {
13147  INTERESTING("APSL-1.2");
13148  }
13149  if (INFILE(_SPDX_APSL_20)) {
13150  INTERESTING("APSL-2.0");
13151  }
13152  if (INFILE(_SPDX_Artistic_10_Perl)) {
13153  INTERESTING("Artistic-1.0-Perl");
13154  }
13155  else if (INFILE(_SPDX_Artistic_10_cl8)) {
13156  INTERESTING("Artistic-1.0-cl8");
13157  }
13158  else if (INFILE(_SPDX_Artistic_10)) {
13159  INTERESTING("Artistic-1.0");
13160  }
13161  if (INFILE(_SPDX_Artistic_20)) {
13162  INTERESTING("Artistic-2.0");
13163  }
13164  if (INFILE(_SPDX_AAL)) {
13165  INTERESTING("AAL");
13166  }
13167  if (INFILE(_SPDX_Bahyph)) {
13168  INTERESTING("Bahyph");
13169  }
13170  if (INFILE(_SPDX_Baekmuk)) {
13171  INTERESTING("Baekmuk");
13172  }
13173  if (INFILE(_SPDX_Barr)) {
13174  INTERESTING("Barr");
13175  }
13176  if (INFILE(_SPDX_Beerware)) {
13177  INTERESTING("Beerware");
13178  }
13179  if (INFILE(_SPDX_BitTorrent_10)) {
13180  INTERESTING("BitTorrent-1.0");
13181  }
13182  else if (INFILE(_SPDX_BitTorrent_11)) {
13183  INTERESTING("BitTorrent-1.1");
13184  }
13185  if (INFILE(_SPDX_blessing)) {
13186  INTERESTING("blessing");
13187  }
13188  if (INFILE(_SPDX_BlueOak_100)) {
13189  INTERESTING("BlueOak-1.0.0");
13190  }
13191  if (INFILE(_SPDX_BSL_10)) {
13192  INTERESTING("BSL-1.0");
13193  }
13194  if (INFILE(_SPDX_Borceux)) {
13195  INTERESTING("Borceux");
13196  }
13197  if (INFILE(_SPDX_0BSD)) {
13198  INTERESTING("0BSD");
13199  }
13200  if (INFILE(_SPDX_bzip2_105)) {
13201  INTERESTING("bzip2-1.0.5");
13202  }
13203  else if (INFILE(_SPDX_bzip2_106)) {
13204  INTERESTING("bzip2-1.0.6");
13205  }
13206  if (INFILE(_SPDX_Caldera)) {
13207  INTERESTING("Caldera");
13208  }
13209  if (INFILE(_SPDX_CC_PDDC)) {
13210  INTERESTING("CC-PDDC");
13211  }
13212  if (INFILE(_SPDX_CERN_OHL_P_20)) {
13213  INTERESTING("CERN-OHL-P-2.0");
13214  }
13215  else if (INFILE(_SPDX_CERN_OHL_S_20)) {
13216  INTERESTING("CERN-OHL-S-2.0");
13217  }
13218  else if (INFILE(_SPDX_CERN_OHL_W_20)) {
13219  INTERESTING("CERN-OHL-W-2.0");
13220  }
13221  else if (INFILE(_SPDX_CERN_OHL_12)) {
13222  INTERESTING("CERN-OHL-1.2");
13223  }
13224  else if (INFILE(_SPDX_CERN_OHL_11)) {
13225  INTERESTING("CERN-OHL-1.1");
13226  }
13227  if (INFILE(_SPDX_ClArtistic)) {
13228  INTERESTING("ClArtistic");
13229  }
13230  if (INFILE(_SPDX_CNRI_Jython)) {
13231  INTERESTING("CNRI-Jython");
13232  }
13233  if (INFILE(_SPDX_CPOL_102)) {
13234  INTERESTING("CPOL-1.02");
13235  }
13236  if (INFILE(_SPDX_CPAL_10)) {
13237  INTERESTING("CPAL-1.0");
13238  }
13239  if (INFILE(_SPDX_CPL_10)) {
13240  INTERESTING("CPL-1.0");
13241  }
13242  if (INFILE(_SPDX_CAL_10_Combined_Work_Exception)) {
13243  INTERESTING("CAL-1.0-Combined-Work-Exception");
13244  }
13245  else if (INFILE(_SPDX_CAL_10)) {
13246  INTERESTING("CAL-1.0");
13247  }
13248  if (INFILE(_SPDX_CATOSL_11)) {
13249  INTERESTING("CATOSL-1.1");
13250  }
13251  if (INFILE(_SPDX_Condor_11)) {
13252  INTERESTING("Condor-1.1");
13253  }
13254  if (INFILE(_SPDX_CC_BY_10)) {
13255  INTERESTING("CC-BY-1.0");
13256  }
13257  else if (INFILE(_SPDX_CC_BY_20)) {
13258  INTERESTING("CC-BY-2.0");
13259  }
13260  else if (INFILE(_SPDX_CC_BY_25)) {
13261  INTERESTING("CC-BY-2.5");
13262  }
13263  else if (INFILE(_SPDX_CC_BY_30_AT)) {
13264  INTERESTING("CC-BY-3.0-AT");
13265  }
13266  else if (INFILE(_SPDX_CC_BY_30)) {
13267  INTERESTING("CC-BY-3.0");
13268  }
13269  else if (INFILE(_SPDX_CC_BY_40)) {
13270  INTERESTING("CC-BY-4.0");
13271  }
13272  if (INFILE(_SPDX_CC_BY_ND_10)) {
13273  INTERESTING("CC-BY-ND-1.0");
13274  }
13275  else if (INFILE(_SPDX_CC_BY_ND_20)) {
13276  INTERESTING("CC-BY-ND-2.0");
13277  }
13278  else if (INFILE(_SPDX_CC_BY_ND_25)) {
13279  INTERESTING("CC-BY-ND-2.5");
13280  }
13281  else if (INFILE(_SPDX_CC_BY_ND_30)) {
13282  INTERESTING("CC-BY-ND-3.0");
13283  }
13284  else if (INFILE(_SPDX_CC_BY_ND_40)) {
13285  INTERESTING("CC-BY-ND-4.0");
13286  }
13287  if (INFILE(_SPDX_CC_BY_NC_10)) {
13288  INTERESTING("CC-BY-NC-1.0");
13289  }
13290  else if (INFILE(_SPDX_CC_BY_NC_20)) {
13291  INTERESTING("CC-BY-NC-2.0");
13292  }
13293  else if (INFILE(_SPDX_CC_BY_NC_25)) {
13294  INTERESTING("CC-BY-NC-2.5");
13295  }
13296  else if (INFILE(_SPDX_CC_BY_NC_30)) {
13297  INTERESTING("CC-BY-NC-3.0");
13298  }
13299  else if (INFILE(_SPDX_CC_BY_NC_40)) {
13300  INTERESTING("CC-BY-NC-4.0");
13301  }
13302  if (INFILE(_SPDX_CC_BY_NC_ND_10)) {
13303  INTERESTING("CC-BY-NC-ND-1.0");
13304  }
13305  else if (INFILE(_SPDX_CC_BY_NC_ND_20)) {
13306  INTERESTING("CC-BY-NC-ND-2.0");
13307  }
13308  else if (INFILE(_SPDX_CC_BY_NC_ND_25)) {
13309  INTERESTING("CC-BY-NC-ND-2.5");
13310  }
13311  else if (INFILE(_SPDX_CC_BY_NC_ND_30_IGO)) {
13312  INTERESTING("CC-BY-NC-ND-3.0-IGO");
13313  }
13314  else if (INFILE(_SPDX_CC_BY_NC_ND_30)) {
13315  INTERESTING("CC-BY-NC-ND-3.0");
13316  }
13317  else if (INFILE(_SPDX_CC_BY_NC_ND_40)) {
13318  INTERESTING("CC-BY-NC-ND-4.0");
13319  }
13320  if (INFILE(_SPDX_CC_BY_NC_SA_10)) {
13321  INTERESTING("CC-BY-NC-SA-1.0");
13322  }
13323  else if (INFILE(_SPDX_CC_BY_NC_SA_20)) {
13324  INTERESTING("CC-BY-NC-SA-2.0");
13325  }
13326  else if (INFILE(_SPDX_CC_BY_NC_SA_25)) {
13327  INTERESTING("CC-BY-NC-SA-2.5");
13328  }
13329  else if (INFILE(_SPDX_CC_BY_NC_SA_30)) {
13330  INTERESTING("CC-BY-NC-SA-3.0");
13331  }
13332  else if (INFILE(_SPDX_CC_BY_NC_SA_40)) {
13333  INTERESTING("CC-BY-NC-SA-4.0");
13334  }
13335  if (INFILE(_SPDX_CC_BY_SA_10)) {
13336  INTERESTING("CC-BY-SA-1.0");
13337  }
13338  else if (INFILE(_SPDX_CC_BY_SA_20)) {
13339  INTERESTING("CC-BY-SA-2.0");
13340  }
13341  else if (INFILE(_SPDX_CC_BY_SA_25)) {
13342  INTERESTING("CC-BY-SA-2.5");
13343  }
13344  else if (INFILE(_SPDX_CC_BY_SA_30_AT)) {
13345  INTERESTING("CC-BY-SA-3.0-AT");
13346  }
13347  else if (INFILE(_SPDX_CC_BY_SA_30)) {
13348  INTERESTING("CC-BY-SA-3.0");
13349  }
13350  else if (INFILE(_SPDX_CC_BY_SA_40)) {
13351  INTERESTING("CC-BY-SA-4.0");
13352  }
13353  if (INFILE(_SPDX_CDLA_Permissive_10)) {
13354  INTERESTING("CDLA-Permissive-1.0");
13355  }
13356  if (INFILE(_SPDX_CDLA_Sharing_10)) {
13357  INTERESTING("CDLA-Sharing-1.0");
13358  }
13359  if (INFILE(_SPDX_Crossword)) {
13360  INTERESTING("Crossword");
13361  }
13362  if (INFILE(_SPDX_CrystalStacker)) {
13363  INTERESTING("CrystalStacker");
13364  }
13365  if (INFILE(_SPDX_CUA_OPL_10)) {
13366  INTERESTING("CUA-OPL-1.0");
13367  }
13368  if (INFILE(_SPDX_Cube)) {
13369  INTERESTING("Cube");
13370  }
13371  if (INFILE(_SPDX_curl)) {
13372  INTERESTING("curl");
13373  }
13374  if (INFILE(_SPDX_D_FSL_10)) {
13375  INTERESTING("D-FSL-1.0");
13376  }
13377  if (INFILE(_SPDX_diffmark)) {
13378  INTERESTING("diffmark");
13379  }
13380  if (INFILE(_SPDX_WTFPL)) {
13381  INTERESTING("WTFPL");
13382  }
13383  if (HASTEXT(_SPDX_DOC, REG_EXTENDED) || HASTEXT(_PHR_DOC, REG_EXTENDED)) {
13384  INTERESTING("DOC");
13385  }
13386  if (INFILE(_SPDX_Dotseqn)) {
13387  INTERESTING("Dotseqn");
13388  }
13389  if (INFILE(_SPDX_DSDP)) {
13390  INTERESTING("DSDP");
13391  }
13392  if (INFILE(_SPDX_dvipdfm)) {
13393  INTERESTING("dvipdfm");
13394  }
13395  if (INFILE(_SPDX_EPL_10)) {
13396  INTERESTING("EPL-1.0");
13397  }
13398  else if (INFILE(_SPDX_EPL_20)) {
13399  INTERESTING("EPL-2.0");
13400  }
13401  if (INFILE(_SPDX_ECL_10)) {
13402  INTERESTING("ECL-1.0");
13403  }
13404  if (INFILE(_SPDX_ECL_20)) {
13405  INTERESTING("ECL-2.0");
13406  }
13407  if (INFILE(_SPDX_eGenix)) {
13408  INTERESTING("eGenix");
13409  }
13410  if (INFILE(_SPDX_EFL_10)) {
13411  INTERESTING("EFL-1.0");
13412  }
13413  if (INFILE(_SPDX_EFL_20)) {
13414  INTERESTING("EFL-2.0");
13415  }
13416  if (INFILE(_SPDX_Entessa)) {
13417  INTERESTING("Entessa");
13418  }
13419  if (INFILE(_SPDX_EPICS)) {
13420  INTERESTING("EPICS");
13421  }
13422  if (INFILE(_SPDX_ErlPL_11)) {
13423  INTERESTING("ErlPL-1.1");
13424  }
13425  if (INFILE(_SPDX_etalab_20)) {
13426  INTERESTING("etalab-2.0");
13427  }
13428  if (INFILE(_SPDX_EUDatagrid)) {
13429  INTERESTING("EUDatagrid");
13430  }
13431  if (INFILE(_SPDX_EUPL_10)) {
13432  INTERESTING("EUPL-1.0");
13433  }
13434  else if (INFILE(_SPDX_EUPL_11)) {
13435  INTERESTING("EUPL-1.1");
13436  }
13437  else if (INFILE(_SPDX_EUPL_12)) {
13438  INTERESTING("EUPL-1.2");
13439  }
13440  if (INFILE(_SPDX_Eurosym)) {
13441  INTERESTING("Eurosym");
13442  }
13443  if (HASTEXT(_SPDX_Fair, REG_EXTENDED) || HASTEXT(_PHR_Fair, REG_EXTENDED)) {
13444  INTERESTING("Fair");
13445  }
13446  if (INFILE(_SPDX_Frameworx_10)) {
13447  INTERESTING("Frameworx-1.0");
13448  }
13449  if (INFILE(_SPDX_FreeImage)) {
13450  INTERESTING("FreeImage");
13451  }
13452  if (INFILE(_SPDX_FSFAP)) {
13453  INTERESTING("FSFAP");
13454  }
13455  if (INFILE(_SPDX_FSFULLR)) {
13456  INTERESTING("FSFULLR");
13457  }
13458  else if (INFILE(_SPDX_FSFUL)) {
13459  INTERESTING("FSFUL");
13460  }
13461  if (INFILE(_SPDX_Giftware)) {
13462  INTERESTING("Giftware");
13463  }
13464  if (INFILE(_SPDX_GL2PS)) {
13465  INTERESTING("GL2PS");
13466  }
13467  if (INFILE(_SPDX_Glulxe)) {
13468  INTERESTING("Glulxe");
13469  }
13470  if (INFILE(_SPDX_GFDL_11_invariants_or_later)) {
13471  INTERESTING("GFDL-1.1-invariants-or-later");
13472  }
13473  else if (INFILE(_SPDX_GFDL_11_no_invariants_or_later)) {
13474  INTERESTING("GFDL-1.1-no-invariants-or-later");
13475  }
13476  else if (INFILE(_SPDX_GFDL_11_invariants_only)) {
13477  INTERESTING("GFDL-1.1-invariants-only");
13478  }
13479  else if (INFILE(_SPDX_GFDL_11_no_invariants_only)) {
13480  INTERESTING("GFDL-1.1-no-invariants-only");
13481  }
13482  else if (INFILE(_SPDX_GFDL_11_or_later)
13483  || HASTEXT(_SPDX_GFDL_11plus, REG_EXTENDED)
13484  || HASTEXT(_PHR_GFDL_11plus, REG_EXTENDED))
13485  {
13486  INTERESTING("GFDL-1.1-or-later");
13487  }
13488  else if (INFILE(_SPDX_GFDL_11)) {
13489  INTERESTING("GFDL-1.1-only");
13490  }
13491  else if (INFILE(_SPDX_GFDL_12_invariants_or_later)) {
13492  INTERESTING("GFDL-1.2-invariants-or-later");
13493  }
13494  else if (INFILE(_SPDX_GFDL_12_no_invariants_or_later)) {
13495  INTERESTING("GFDL-1.2-no-invariants-or-later");
13496  }
13497  else if (INFILE(_SPDX_GFDL_12_invariants_only)) {
13498  INTERESTING("GFDL-1.2-invariants-only");
13499  }
13500  else if (INFILE(_SPDX_GFDL_12_no_invariants_only)) {
13501  INTERESTING("GFDL-1.2-no-invariants-only");
13502  }
13503  else if (INFILE(_SPDX_GFDL_12_or_later)
13504  || HASTEXT(_SPDX_GFDL_12plus, REG_EXTENDED)
13505  || HASTEXT(_PHR_GFDL_12plus, REG_EXTENDED))
13506  {
13507  INTERESTING("GFDL-1.2-or-later");
13508  }
13509  else if (INFILE(_SPDX_GFDL_12)) {
13510  INTERESTING("GFDL-1.2-only");
13511  }
13512  else if (INFILE(_SPDX_GFDL_13_invariants_or_later)) {
13513  INTERESTING("GFDL-1.3-invariants-or-later");
13514  }
13515  else if (INFILE(_SPDX_GFDL_13_no_invariants_or_later)) {
13516  INTERESTING("GFDL-1.3-no-invariants-or-later");
13517  }
13518  else if (INFILE(_SPDX_GFDL_13_invariants_only)) {
13519  INTERESTING("GFDL-1.3-invariants-only");
13520  }
13521  else if (INFILE(_SPDX_GFDL_13_no_invariants_only)) {
13522  INTERESTING("GFDL-1.3-no-invariants-only");
13523  }
13524  else if (INFILE(_SPDX_GFDL_13_or_later)
13525  || HASTEXT(_SPDX_GFDL_13plus, REG_EXTENDED)
13526  || HASTEXT(_PHR_GFDL_13plus, REG_EXTENDED))
13527  {
13528  INTERESTING("GFDL-1.3-or-later");
13529  }
13530  else if (INFILE(_SPDX_GFDL_13)) {
13531  INTERESTING("GFDL-1.3");
13532  }
13533  if (INFILE(_SPDX_GLWTPL) || INFILE(_SPDX_GLWTPL_text)) {
13534  INTERESTING("GLWTPL");
13535  }
13536  if (INFILE(_SPDX_gnuplot)) {
13537  INTERESTING("gnuplot");
13538  }
13539  if (INFILE(_SPDX_gSOAP_13b)) {
13540  INTERESTING("gSOAP-1.3b");
13541  }
13542  if (INFILE(_SPDX_Gutmann)) {
13543  INTERESTING("Gutmann");
13544  }
13545  if (INFILE(_SPDX_HaskellReport)) {
13546  INTERESTING("HaskellReport");
13547  }
13548  if (INFILE(_SPDX_Hippocratic_21)) {
13549  INTERESTING("Hippocratic-2.1");
13550  }
13551  if (INFILE(_SPDX_HPND_sell_variant)) {
13552  INTERESTING("HPND-sell-variant");
13553  }
13554  else if (INFILE(_SPDX_HPND)) {
13555  INTERESTING("HPND");
13556  }
13557  if (INFILE(_SPDX_IBM_pibs)) {
13558  INTERESTING("IBM-pibs");
13559  }
13560  if (INFILE(_SPDX_IPL_10)) {
13561  INTERESTING("IPL-1.0");
13562  }
13563  if (INFILE(_SPDX_ImageMagick)) {
13564  INTERESTING("ImageMagick");
13565  }
13566  if (INFILE(_SPDX_iMatix)) {
13567  INTERESTING("iMatix");
13568  }
13569  if (INFILE(_SPDX_Imlib2)) {
13570  INTERESTING("Imlib2");
13571  }
13572  if (INFILE(_SPDX_IJG)) {
13573  INTERESTING("IJG");
13574  }
13575  if (INFILE(_SPDX_Info_ZIP)) {
13576  INTERESTING("Info-ZIP");
13577  }
13578  if (INFILE(_SPDX_Interbase_10)) {
13579  INTERESTING("Interbase-1.0");
13580  }
13581  if (INFILE(_SPDX_IPA)) {
13582  INTERESTING("IPA");
13583  }
13584  if (INFILE(_SPDX_ISC)) {
13585  INTERESTING("ISC");
13586  }
13587  if (INFILE(_SPDX_JasPer_20)) {
13588  INTERESTING("JasPer-2.0");
13589  }
13590  if (INFILE(_SPDX_JPNIC)) {
13591  INTERESTING("JPNIC");
13592  }
13593  if (INFILE(_SPDX_JSON)) {
13594  INTERESTING("JSON");
13595  }
13596  if (INFILE(_SPDX_Latex2e)) {
13597  INTERESTING("Latex2e");
13598  }
13599  if (INFILE(_SPDX_Leptonica)) {
13600  INTERESTING("Leptonica");
13601  }
13602  if (INFILE(_SPDX_LGPLLR)) {
13603  INTERESTING("LGPLLR");
13604  }
13605  if (INFILE(_SPDX_libpng_20)) {
13606  INTERESTING("libpng-2.0");
13607  }
13608  else if (INFILE(_SPDX_Libpng)) {
13609  INTERESTING("Libpng");
13610  }
13611  if (INFILE(_SPDX_libselinux_10)) {
13612  INTERESTING("libselinux-1.0");
13613  }
13614  if (INFILE(_SPDX_libtiff)) {
13615  INTERESTING("libtiff");
13616  }
13617  if (INFILE(_SPDX_LAL_12)) {
13618  INTERESTING("LAL-1.2");
13619  }
13620  if (INFILE(_SPDX_LAL_13) || INFILE(_SPDX_LAL_13_text)) {
13621  INTERESTING("LAL-1.3");
13622  }
13623  if (INFILE(_SPDX_LiLiQ_P_11)) {
13624  INTERESTING("LiLiQ-P-1.1");
13625  }
13626  if (INFILE(_SPDX_LiLiQ_Rplus_11)) {
13627  INTERESTING("LiLiQ-Rplus-1.1");
13628  }
13629  if (INFILE(_SPDX_LiLiQ_R_11)) {
13630  INTERESTING("LiLiQ-R-1.1");
13631  }
13632  if (INFILE(_SPDX_Linux_OpenIB)) {
13633  INTERESTING("Linux-OpenIB");
13634  }
13635  if (INFILE(_SPDX_LPL_102)) {
13636  INTERESTING("LPL-1.02");
13637  }
13638  else if (INFILE(_SPDX_LPL_10)) {
13639  INTERESTING("LPL-1.0");
13640  }
13641  if (INFILE(_SPDX_LPPL_10)) {
13642  INTERESTING("LPPL-1.0");
13643  }
13644  if (INFILE(_SPDX_LPPL_11)) {
13645  INTERESTING("LPPL-1.1");
13646  }
13647  if (INFILE(_SPDX_LPPL_12)) {
13648  INTERESTING("LPPL-1.2");
13649  }
13650  if (INFILE(_SPDX_LPPL_13a)) {
13651  INTERESTING("LPPL-1.3a");
13652  }
13653  if (INFILE(_SPDX_LPPL_13c)) {
13654  INTERESTING("LPPL-1.3c");
13655  }
13656  if (INFILE(_SPDX_MakeIndex)) {
13657  INTERESTING("MakeIndex");
13658  }
13659  if (INFILE(_SPDX_MTLL)) {
13660  INTERESTING("MTLL");
13661  }
13662  if (INFILE(_SPDX_MS_PL)) {
13663  INTERESTING("MS-PL");
13664  }
13665  if (INFILE(_SPDX_MS_RL)) {
13666  INTERESTING("MS-RL");
13667  }
13668  if (INFILE(_SPDX_MirOS)) {
13669  INTERESTING("MirOS");
13670  }
13671  if (INFILE(_SPDX_MITNFA)) {
13672  INTERESTING("MITNFA");
13673  }
13674  if (!lmem[_fREAL] && INFILE(_SPDX_Motosoto)) {
13675  INTERESTING("Motosoto");
13676  }
13677  if (INFILE(_SPDX_mpich2)) {
13678  INTERESTING("mpich2");
13679  }
13680  if (INFILE(_SPDX_MulanPSL_20)) {
13681  INTERESTING("MulanPSL-2.0");
13682  }
13683  else if (INFILE(_SPDX_MulanPSL_10)) {
13684  INTERESTING("MulanPSL-1.0");
13685  }
13686  if (INFILE(_SPDX_Multics)) {
13687  INTERESTING("Multics");
13688  }
13689  if (INFILE(_SPDX_Mup)) {
13690  INTERESTING("Mup");
13691  }
13692  if (INFILE(_SPDX_NASA_13)) {
13693  INTERESTING("NASA-1.3");
13694  }
13695  if (INFILE(_SPDX_Naumen)) {
13696  INTERESTING("Naumen");
13697  }
13698  if (INFILE(_SPDX_NBPL_10)) {
13699  INTERESTING("NBPL-1.0");
13700  }
13701  if (INFILE(_SPDX_NCGL_UK_20)) {
13702  INTERESTING("NCGL-UK-2.0");
13703  }
13704  if (INFILE(_SPDX_Net_SNMP)) {
13705  INTERESTING("Net-SNMP");
13706  }
13707  if (INFILE(_SPDX_NetCDF)) {
13708  INTERESTING("NetCDF");
13709  }
13710  if (INFILE(_SPDX_NGPL)) {
13711  INTERESTING("NGPL");
13712  }
13713  if (INFILE(_SPDX_NIST_PD_fallback)) {
13714  INTERESTING("NIST-PD-fallback");
13715  }
13716  else if (INFILE(_SPDX_NIST_PD)) {
13717  INTERESTING("NIST-PD");
13718  }
13719  if (INFILE(_SPDX_NOSL)) {
13720  INTERESTING("NOSL");
13721  }
13722  if (INFILE(_SPDX_NPL_10)) {
13723  INTERESTING("NPL-1.0");
13724  }
13725  if (INFILE(_SPDX_NPL_11)) {
13726  INTERESTING("NPL-1.1");
13727  }
13728  if (INFILE(_SPDX_Newsletr)) {
13729  INTERESTING("Newsletr");
13730  }
13731  if (INFILE(_SPDX_NLPL)) {
13732  INTERESTING("NLPL");
13733  }
13734  if (INFILE(_SPDX_Nokia) && NOT_INFILE(_LT_OPENSSL_NOKIA)) {
13735  INTERESTING("Nokia");
13736  }
13737  if (INFILE(_SPDX_NPOSL_30)) {
13738  INTERESTING("NPOSL-3.0");
13739  }
13740  if (INFILE(_SPDX_NLOD_10) || INFILE(_SPDX_NLOD_10_text)) {
13741  INTERESTING("NLOD-1.0");
13742  }
13743  if (INFILE(_SPDX_Noweb)) {
13744  INTERESTING("Noweb");
13745  }
13746  if (INFILE(_SPDX_NRL)) {
13747  INTERESTING("NRL");
13748  }
13749  if (INFILE(_SPDX_NTP_0)) {
13750  INTERESTING("NTP-0");
13751  }
13752  else if (INFILE(_SPDX_NTP)) {
13753  INTERESTING("NTP");
13754  }
13755  if (INFILE(_SPDX_Nunit)) {
13756  INTERESTING("Nunit");
13757  }
13758  if (INFILE(_SPDX_O_UDA_10)) {
13759  INTERESTING("O-UDA-1.0");
13760  }
13761  if (INFILE(_SPDX_OCLC_20)) {
13762  INTERESTING("OCLC-2.0");
13763  }
13764  if (INFILE(_SPDX_ODbL_10)) {
13765  INTERESTING("ODbL-1.0");
13766  }
13767  if (INFILE(_SPDX_OGC_10)) {
13768  INTERESTING("OGC-1.0");
13769  }
13770  if (INFILE(_SPDX_PDDL_10)) {
13771  INTERESTING("PDDL-1.0");
13772  }
13773  if (INFILE(_SPDX_OCCT_PL)) {
13774  INTERESTING("OCCT-PL");
13775  }
13776  if (INFILE(_SPDX_ODC_By_10)) {
13777  INTERESTING("ODC-By-1.0");
13778  }
13779  if (INFILE(_SPDX_OGL_Canada_20) || INFILE(_SPDX_OGL_Canada_20_text)) {
13780  INTERESTING("OGL-Canada-2.0");
13781  }
13782  if (INFILE(_SPDX_OGL_UK_10)) {
13783  INTERESTING("OGL-UK-1.0");
13784  }
13785  else if (INFILE(_SPDX_OGL_UK_20)) {
13786  INTERESTING("OGL-UK-2.0");
13787  }
13788  else if (INFILE(_SPDX_OGL_UK_30)) {
13789  INTERESTING("OGL-UK-3.0");
13790  }
13791  if (INFILE(_SPDX_OGTSL)) {
13792  INTERESTING("OGTSL");
13793  }
13794  if (INFILE(_SPDX_OLDAP_11)) {
13795  INTERESTING("OLDAP-1.1");
13796  }
13797  else if (INFILE(_SPDX_OLDAP_12)) {
13798  INTERESTING("OLDAP-1.2");
13799  }
13800  else if (INFILE(_SPDX_OLDAP_13)) {
13801  INTERESTING("OLDAP-1.3");
13802  }
13803  else if (INFILE(_SPDX_OLDAP_14)) {
13804  INTERESTING("OLDAP-1.4");
13805  }
13806  else if (INFILE(_SPDX_OLDAP_201)) {
13807  INTERESTING("OLDAP-2.0.1");
13808  }
13809  else if (INFILE(_SPDX_OLDAP_20)) {
13810  INTERESTING("OLDAP-2.0");
13811  }
13812  else if (INFILE(_SPDX_OLDAP_21)) {
13813  INTERESTING("OLDAP-2.1");
13814  }
13815  else if (INFILE(_SPDX_OLDAP_221)) {
13816  INTERESTING("OLDAP-2.2.1");
13817  }
13818  else if (INFILE(_SPDX_OLDAP_222)) {
13819  INTERESTING("OLDAP-2.2.2");
13820  }
13821  else if (INFILE(_SPDX_OLDAP_22)) {
13822  INTERESTING("OLDAP-2.2");
13823  }
13824  else if (INFILE(_SPDX_OLDAP_23)) {
13825  INTERESTING("OLDAP-2.3");
13826  }
13827  else if (INFILE(_SPDX_OLDAP_24)) {
13828  INTERESTING("OLDAP-2.4");
13829  }
13830  else if (INFILE(_SPDX_OLDAP_25)) {
13831  INTERESTING("OLDAP-2.5");
13832  }
13833  else if (INFILE(_SPDX_OLDAP_26)) {
13834  INTERESTING("OLDAP-2.6");
13835  }
13836  else if (INFILE(_SPDX_OLDAP_27)) {
13837  INTERESTING("OLDAP-2.7");
13838  }
13839  else if (INFILE(_SPDX_OLDAP_28)) {
13840  INTERESTING("OLDAP-2.8");
13841  }
13842  if (INFILE(_SPDX_OML)) {
13843  INTERESTING("OML");
13844  }
13845  if (INFILE(_SPDX_OPL_10)) {
13846  INTERESTING("OPL-1.0");
13847  }
13848  if (INFILE(_SPDX_OSL_10)) {
13849  INTERESTING("OSL-1.0");
13850  }
13851  if (INFILE(_SPDX_OSL_11)) {
13852  INTERESTING("OSL-1.1");
13853  }
13854  if (INFILE(_SPDX_OSL_20)) {
13855  INTERESTING("OSL-2.0");
13856  }
13857  if (INFILE(_SPDX_OSL_21)) {
13858  INTERESTING("OSL-2.1");
13859  }
13860  if (INFILE(_SPDX_OSL_30)) {
13861  INTERESTING("OSL-3.0");
13862  }
13863  if (INFILE(_SPDX_OSET_PL_21)) {
13864  INTERESTING("OSET-PL-2.1");
13865  }
13866  if (INFILE(_SPDX_Parity_700)) {
13867  INTERESTING("Parity-7.0.0");
13868  }
13869  else if (INFILE(_SPDX_Parity_600) || INFILE(_SPDX_Parity_600_text)) {
13870  INTERESTING("Parity-6.0.0");
13871  }
13872  if (INFILE(_SPDX_PHP_301)) {
13873  INTERESTING("PHP-3.01");
13874  }
13875  else if (INFILE(_SPDX_PHP_30)) {
13876  INTERESTING("PHP-3.0");
13877  }
13878  if (INFILE(_SPDX_Plexus)) {
13879  INTERESTING("Plexus");
13880  }
13881  if (INFILE(_SPDX_PolyForm_Noncommercial_100)) {
13882  INTERESTING("PolyForm-Noncommercial-1.0.0");
13883  }
13884  else if (INFILE(_SPDX_PolyForm_Small_Business_100)) {
13885  INTERESTING("PolyForm-Small-Business-1.0.0");
13886  }
13887  if (INFILE(_SPDX_PostgreSQL)) {
13888  INTERESTING("PostgreSQL");
13889  }
13890  if (INFILE(_SPDX_PSF_20)) {
13891  INTERESTING("PSF-2.0");
13892  }
13893  if (INFILE(_SPDX_psfrag)) {
13894  INTERESTING("psfrag");
13895  }
13896  if (INFILE(_SPDX_psutils)) {
13897  INTERESTING("psutils");
13898  }
13899  if (INFILE(_SPDX_Python_20)) {
13900  INTERESTING("Python-2.0");
13901  }
13902  if (INFILE(_SPDX_QPL_10)) {
13903  INTERESTING("QPL-1.0");
13904  }
13905  if (INFILE(_SPDX_Qhull)) {
13906  INTERESTING("Qhull");
13907  }
13908  if (INFILE(_SPDX_Rdisc)) {
13909  INTERESTING("Rdisc");
13910  }
13911  if (INFILE(_SPDX_RPSL_10)) {
13912  INTERESTING("RPSL-1.0");
13913  }
13914  if (INFILE(_SPDX_RPL_11)) {
13915  INTERESTING("RPL-1.1");
13916  }
13917  if (INFILE(_SPDX_RPL_15)) {
13918  INTERESTING("RPL-1.5");
13919  }
13920  if (INFILE(_SPDX_RHeCos_11)) {
13921  INTERESTING("RHeCos-1.1");
13922  }
13923  if (INFILE(_SPDX_RSCPL)) {
13924  INTERESTING("RSCPL");
13925  }
13926  if (INFILE(_SPDX_RSA_MD)) {
13927  INTERESTING("RSA-MD");
13928  }
13929  if (INFILE(_SPDX_Ruby)) {
13930  INTERESTING("Ruby");
13931  }
13932  if (INFILE(_SPDX_SAX_PD)) {
13933  INTERESTING("SAX-PD");
13934  }
13935  if (INFILE(_SPDX_Saxpath)) {
13936  INTERESTING("Saxpath");
13937  }
13938  if (INFILE(_SPDX_SHL_051)) {
13939  INTERESTING("SHL-0.51");
13940  }
13941  else if (INFILE(_SPDX_SHL_05)) {
13942  INTERESTING("SHL-0.5");
13943  }
13944  if (INFILE(_SPDX_SCEA)) {
13945  INTERESTING("SCEA");
13946  }
13947  if (INFILE(_SPDX_SWL)) {
13948  INTERESTING("SWL");
13949  }
13950  if (INFILE(_SPDX_SMPPL)) {
13951  INTERESTING("SMPPL");
13952  }
13953  if (INFILE(_SPDX_Sendmail_823)) {
13954  INTERESTING("Sendmail-8.23");
13955  }
13956  else if (INFILE(_SPDX_Sendmail)) {
13957  INTERESTING("Sendmail");
13958  }
13959  if (INFILE(_SPDX_SGI_B_10)) {
13960  INTERESTING("SGI-B-1.0");
13961  }
13962  if (INFILE(_SPDX_SGI_B_11)) {
13963  INTERESTING("SGI-B-1.1");
13964  }
13965  if (INFILE(_SPDX_SGI_B_20)) {
13966  INTERESTING("SGI-B-2.0");
13967  }
13968  if (INFILE(_SPDX_SimPL_20)) {
13969  INTERESTING("SimPL-2.0");
13970  }
13971  if (INFILE(_SPDX_Sleepycat)) {
13972  INTERESTING("Sleepycat");
13973  }
13974  if (INFILE(_SPDX_SNIA)) {
13975  INTERESTING("SNIA");
13976  }
13977  if (INFILE(_SPDX_Spencer_86)) {
13978  INTERESTING("Spencer-86");
13979  }
13980  if (INFILE(_SPDX_Spencer_94)) {
13981  INTERESTING("Spencer-94");
13982  }
13983  if (INFILE(_SPDX_Spencer_99)) {
13984  INTERESTING("Spencer-99");
13985  }
13986  if (INFILE(_SPDX_SMLNJ)) {
13987  INTERESTING("SMLNJ");
13988  }
13989  if (INFILE(_SPDX_SSH_OpenSSH)) {
13990  INTERESTING("SSH-OpenSSH");
13991  }
13992  if (INFILE(_SPDX_SSH_short)) {
13993  INTERESTING("SSH-short");
13994  }
13995  if (INFILE(_SPDX_SSPL_10)) {
13996  INTERESTING("SSPL-1.0");
13997  }
13998  if (INFILE(_SPDX_SugarCRM_113)) {
13999  INTERESTING("SugarCRM-1.1.3");
14000  }
14001  if (INFILE(_SPDX_SISSL_12)) {
14002  INTERESTING("SISSL-1.2");
14003  }
14004  else if (!lmem[_fREAL] && INFILE(_SPDX_SISSL)) {
14005  INTERESTING("SISSL");
14006  }
14007  if (INFILE(_SPDX_SPL_10)) {
14008  INTERESTING("SPL-1.0");
14009  }
14010  if (INFILE(_SPDX_Watcom_10)) {
14011  INTERESTING("Watcom-1.0");
14012  }
14013  if (INFILE(_SPDX_TAPR_OHL_10)) {
14014  INTERESTING("TAPR-OHL-1.0");
14015  }
14016  if (INFILE(_SPDX_TCP_wrappers)) {
14017  INTERESTING("TCP-wrappers");
14018  }
14019  if (INFILE(_SPDX_Unlicense)) {
14020  INTERESTING("Unlicense");
14021  }
14022  if (INFILE(_SPDX_TMate)) {
14023  INTERESTING("TMate");
14024  }
14025  if (INFILE(_SPDX_TORQUE_11)) {
14026  INTERESTING("TORQUE-1.1");
14027  }
14028  if (INFILE(_SPDX_TOSL)) {
14029  INTERESTING("TOSL");
14030  }
14031  if (INFILE(_SPDX_TU_Berlin_10)) {
14032  INTERESTING("TU-Berlin-1.0");
14033  }
14034  else if (INFILE(_SPDX_TU_Berlin_20)) {
14035  INTERESTING("TU-Berlin-2.0");
14036  }
14037  if (INFILE(_SPDX_UCL_10)) {
14038  INTERESTING("UCL-1.0");
14039  }
14040  if (INFILE(_SPDX_Unicode_DFS_2015)) {
14041  INTERESTING("Unicode-DFS-2015");
14042  }
14043  if (INFILE(_SPDX_Unicode_DFS_2016)) {
14044  INTERESTING("Unicode-DFS-2016");
14045  }
14046  if (INFILE(_SPDX_Unicode_TOU)) {
14047  INTERESTING("Unicode-TOU");
14048  }
14049  if (INFILE(_SPDX_UPL_10)) {
14050  INTERESTING("UPL-1.0");
14051  }
14052  if (INFILE(_SPDX_NCSA)) {
14053  INTERESTING("NCSA");
14054  }
14055  if (INFILE(_SPDX_Vim)) {
14056  INTERESTING("Vim");
14057  }
14058  if (INFILE(_SPDX_VOSTROM)) {
14059  INTERESTING("VOSTROM");
14060  }
14061  if (INFILE(_SPDX_VSL_10)) {
14062  INTERESTING("VSL-1.0");
14063  }
14064  if (INFILE(_SPDX_W3C_20150513)) {
14065  INTERESTING("W3C-20150513");
14066  }
14067  else if (INFILE(_SPDX_W3C_19980720)) {
14068  INTERESTING("W3C-19980720");
14069  }
14070  else if (INFILE(_SPDX_W3C)) {
14071  INTERESTING("W3C");
14072  }
14073  if (INFILE(_SPDX_Wsuipa)) {
14074  INTERESTING("Wsuipa");
14075  }
14076  if (!lmem[_fREAL] && INFILE(_SPDX_Xnet)) {
14077  INTERESTING("Xnet");
14078  }
14079  if (INFILE(_SPDX_X11)) {
14080  INTERESTING("X11");
14081  }
14082  if (INFILE(_SPDX_Xerox)) {
14083  INTERESTING("Xerox");
14084  }
14085  if (INFILE(_SPDX_XFree86_11)) {
14086  INTERESTING("XFree86-1.1");
14087  }
14088  if (INFILE(_SPDX_xinetd)) {
14089  INTERESTING("xinetd");
14090  }
14091  if (INFILE(_SPDX_xpp)) {
14092  INTERESTING("xpp");
14093  }
14094  if (INFILE(_SPDX_XSkat)) {
14095  INTERESTING("XSkat");
14096  }
14097  if (INFILE(_SPDX_YPL_10)) {
14098  INTERESTING("YPL-1.0");
14099  }
14100  if (INFILE(_SPDX_YPL_11)) {
14101  INTERESTING("YPL-1.1");
14102  }
14103  if (INFILE(_SPDX_Zed)) {
14104  INTERESTING("Zed");
14105  }
14106  if (INFILE(_SPDX_Zend_20)) {
14107  INTERESTING("Zend-2.0");
14108  }
14109  if (INFILE(_SPDX_Zimbra_13)) {
14110  INTERESTING("Zimbra-1.3");
14111  }
14112  if (INFILE(_SPDX_Zimbra_14)) {
14113  INTERESTING("Zimbra-1.4");
14114  }
14115  if (INFILE(_SPDX_TTWL)) {
14116  INTERESTING("TTWL");
14117  }
14118  if (INFILE(_SPDX_COIL_10)) {
14119  INTERESTING("COIL-1.0");
14120  }
14121  if (INFILE(_SPDX_HIDAPI)) {
14122  INTERESTING("HIDAPI");
14123  }
14124  if (INFILE(_SPDX_ulem)) {
14125  INTERESTING("ulem");
14126  }
14127  if (INFILE(_SPDX_UnixCrypt)) {
14128  INTERESTING("UnixCrypt");
14129  }
14130  if (INFILE(_SPDX_fwlw)) {
14131  INTERESTING("fwlw");
14132  }
14133  if (INFILE(_SPDX_McPhee_slideshow)) {
14134  INTERESTING("McPhee-slideshow");
14135  }
14136  if (INFILE(_SPDX_MIPS)) {
14137  INTERESTING("MIPS");
14138  }
14139  if (INFILE(_SPDX_MPEG_SSG)) {
14140  INTERESTING("MPEG-SSG");
14141  }
14142  if (INFILE(_SPDX_NLOD_20)) {
14143  INTERESTING("NLOD-2.0");
14144  }
14145  if (INFILE(_SPDX_LPD_document)) {
14146  INTERESTING("LPD-document");
14147  }
14148  if (INFILE(_SPDX_SchemeReport)) {
14149  INTERESTING("SchemeReport");
14150  }
14151  if (INFILE(_SPDX_softSurfer)) {
14152  INTERESTING("softSurfer");
14153  }
14154  if (INFILE(_SPDX_swrule)) {
14155  INTERESTING("swrule");
14156  }
14157  if (INFILE(_SPDX_threeparttable)) {
14158  INTERESTING("threeparttable");
14159  }
14160  if (INFILE(_SPDX_Widget_Workshop)) {
14161  INTERESTING("Widget-Workshop");
14162  }
14163  if (INFILE(_SPDX_Zeeff)) {
14164  INTERESTING("Zeeff");
14165  }
14166  if (INFILE(_SPDX_DEC_3_Clause)) {
14167  INTERESTING("DEC-3-Clause");
14168  }
14169  if (INFILE(_SPDX_Kastrup)) {
14170  INTERESTING("Kastrup");
14171  }
14172  if (INFILE(_SPDX_DL_DE_BY_20)) {
14173  INTERESTING("DL-DE-BY-2.0");
14174  }
14175  if (INFILE(_SPDX_DL_DE_ZERO_20)) {
14176  INTERESTING("DL-DE-ZERO-2.0");
14177  }
14178  if (INFILE(_SPDX_Lucida_Bitmap_Fonts)) {
14179  INTERESTING("Lucida-Bitmap-Fonts");
14180  }
14181  if (INFILE(_SPDX_ISO_permission)) {
14182  INTERESTING("ISO-permission");
14183  }
14184  if (INFILE(_SPDX_NYSL_0_9982)) {
14185  INTERESTING("NYSL-0.9982");
14186  }
14187  if (INFILE(_SPDX_LicenseRef_musl_exception)) {
14188  INTERESTING("musl-exception");
14189  }
14190  return;
14191 }
14192 
14197 void copyleftExceptions(char *filetext, int size, int isML, int isPS)
14198 {
14199  if (INFILE(_SPDX_389_exception)) {
14200  INTERESTING("389-exception");
14201  }
14202  if (INFILE(_SPDX_Autoconf_exception_20)) {
14203  INTERESTING("Autoconf-exception-2.0");
14204  }
14205  if (INFILE(_SPDX_Autoconf_exception_30)) {
14206  INTERESTING("Autoconf-exception-3.0");
14207  }
14208  if (INFILE(_SPDX_Bison_exception_22)) {
14209  INTERESTING("Bison-exception-2.2");
14210  }
14211  if (INFILE(_SPDX_Bootloader_exception)) {
14212  INTERESTING("Bootloader-exception");
14213  }
14214  if (INFILE(_SPDX_Classpath_exception_20)) {
14215  INTERESTING("Classpath-exception-2.0");
14216  }
14217  if (INFILE(_SPDX_CLISP_exception_20)) {
14218  INTERESTING("CLISP-exception-2.0");
14219  }
14220  if (INFILE(_SPDX_DigiRule_FOSS_exception)) {
14221  INTERESTING("DigiRule-FOSS-exception");
14222  }
14223  if (INFILE(_SPDX_eCos_exception_20)) {
14224  INTERESTING("eCos-exception-2.0");
14225  }
14226  if (INFILE(_SPDX_Fawkes_Runtime_exception)) {
14227  INTERESTING("Fawkes-Runtime-exception");
14228  }
14229  if (INFILE(_SPDX_FLTK_exception)) {
14230  INTERESTING("FLTK-exception");
14231  }
14232  if (INFILE(_SPDX_Font_exception_20)) {
14233  INTERESTING("Font-exception-2.0");
14234  }
14235  if (INFILE(_SPDX_freertos_exception_20)) {
14236  INTERESTING("freertos-exception-2.0");
14237  }
14238  if (INFILE(_SPDX_GCC_exception_20)) {
14239  INTERESTING("GCC-exception-2.0");
14240  }
14241  if (INFILE(_SPDX_GCC_exception_31)) {
14242  INTERESTING("GCC-exception-3.1");
14243  }
14244  if (INFILE(_SPDX_gnu_javamail_exception)) {
14245  INTERESTING("gnu-javamail-exception");
14246  }
14247  if (INFILE(_SPDX_i2p_gpl_java_exception)) {
14248  INTERESTING("i2p-gpl-java-exception");
14249  }
14250  if (INFILE(_SPDX_Libtool_exception)) {
14251  INTERESTING("Libtool-exception");
14252  }
14253  if (INFILE(_SPDX_Linux_syscall_note)) {
14254  INTERESTING("Linux-syscall-note");
14255  }
14256  if (INFILE(_SPDX_LLVM_exception)) {
14257  INTERESTING("LLVM-exception");
14258  }
14259  if (INFILE(_SPDX_LZMA_exception)) {
14260  INTERESTING("LZMA-exception");
14261  }
14262  if (INFILE(_SPDX_mif_exception)) {
14263  INTERESTING("mif-exception");
14264  }
14265  if (INFILE(_SPDX_Nokia_Qt_exception_11)) {
14266  INTERESTING("Nokia-Qt-exception-1.1");
14267  }
14268  if (INFILE(_SPDX_OCCT_exception_10)) {
14269  INTERESTING("OCCT-exception-1.0");
14270  }
14271  if (INFILE(_SPDX_OpenJDK_assembly_exception_10)) {
14272  INTERESTING("OpenJDK-assembly-exception-1.0");
14273  }
14274  if (INFILE(_SPDX_openvpn_openssl_exception)) {
14275  INTERESTING("openvpn-openssl-exception");
14276  }
14277  if (INFILE(_SPDX_Qwt_exception_10)) {
14278  INTERESTING("Qwt-exception-1.0");
14279  }
14280  if (INFILE(_SPDX_u_boot_exception_20)) {
14281  INTERESTING("u-boot-exception-2.0");
14282  }
14283  if (INFILE(_SPDX_WxWindows_exception_31)) {
14284  INTERESTING("WxWindows-exception-3.1");
14285  }
14286  /*
14287  * Find exception phrases. There are similar phrases
14288  * in exception clauses. Therefore 'else if' structure
14289  * has to be used to get correct detections.
14290  */
14291  if (INFILE(_LT_389_exception)) {
14292  INTERESTING("389-exception");
14293  }
14294  else if (INFILE(_LT_ASN1SCC_exception) || INFILE(_LT_ASN1SCC_exception_2)) {
14295  INTERESTING("ASN1SCC-exception");
14296  }
14297  else if (INFILE(_LT_Autoconf_exception_20)) {
14298  INTERESTING("Autoconf-exception-2.0");
14299  }
14300  else if (INFILE(_LT_GPL_EXCEPT_5) && INFILE(_LT_Autoconf_exception_30)) {
14301  INTERESTING("Autoconf-exception-3.0");
14302  }
14303  else if (INFILE(_PHR_Autoconf_exception_30)) {
14304  INTERESTING("Autoconf-exception-3.0");
14305  }
14306  else if (INFILE(_LT_Autoconf_exception_3)) {
14307  INTERESTING("Autoconf-exception");
14308  }
14309  else if (INFILE(_LT_Bison_exception_22)) {
14310  INTERESTING("Bison-exception-2.2");
14311  }
14312  else if (INFILE(_LT_Bison_exception_1) || INFILE(_LT_Bison_exception_2)) {
14313  INTERESTING("Bison-exception");
14314  }
14315  else if (INFILE(_LT_Bootloader_exception)) {
14316  INTERESTING("Bootloader-exception");
14317  }
14318  /* Contains similar text to classpath-exception */
14319  else if (INFILE(_LT_OpenJDK_assembly_exception_10_1) || HASTEXT(_LT_OpenJDK_assembly_exception_10_2, 0)) {
14320  INTERESTING("OpenJDK-assembly-exception-1.0");
14321  }
14322  else if (INFILE(_LT_GPL_EXCEPT_6)) {
14323  if (INFILE(_LT_mif_exception)) {
14324  INTERESTING("Fawkes-Runtime-exception");
14325  }
14326  else {
14327  INTERESTING("Classpath-exception-2.0");
14328  }
14329  }
14330  else if (INFILE(_LT_classpath_exception_1)) {
14331  INTERESTING("Classpath-exception-2.0");
14332  }
14333  else if (HASTEXT(_LT_CLISP_exception_20_1, 0) && INFILE(_LT_CLISP_exception_20_2)) {
14334  INTERESTING("CLISP-exception-2.0");
14335  }
14336  else if (HASTEXT(_TITLE_DigiRule_FOSS_exception, 0) || INFILE(_LT_DigiRule_FOSS_exception)) {
14337  INTERESTING("DigiRule-FOSS-exception");
14338  }
14339  else if (INFILE(_LT_eCos_exception) && INFILE(_LT_GPL_EXCEPT_7)) {
14340  INTERESTING("eCos-exception-2.0");
14341  }
14342  else if (HASTEXT(_LT_FLTK_exception, 0)) {
14343  INTERESTING("FLTK-exception");
14344  }
14345  else if (HASTEXT(_TEXT_FONT, REG_EXTENDED) || INFILE(_LT_FONT_EXCEPTION_20)) {
14346  INTERESTING("Font-exception-2.0");
14347  }
14348  else if (HASTEXT(_LT_freertos_exception_20, 0)) {
14349  INTERESTING("freertos-exception-2.0");
14350  }
14351  else if (INFILE(_LT_freertos_exception_1) || INFILE(_LT_freertos_exception_2)) {
14352  INTERESTING("freertos-exception");
14353  }
14354  else if (INFILE(_LT_GCC_exception_31_1) || INFILE(_LT_GCC_exception_31_2)) {
14355  INTERESTING("GCC-exception-3.1");
14356  }
14357  else if (INFILE(_LT_GCC_exception_20)) {
14358  INTERESTING("GCC-exception-2.0");
14359  }
14360  /* This wording is very similar to GCC_exception_20 */
14361  else if (INFILE(_LT_linking_exception_1)) {
14362  INTERESTING("linking-exception");
14363  }
14364  else if (HASTEXT(_TEXT_GCC, REG_EXTENDED)) {
14365  INTERESTING("GCC-exception");
14366  }
14367  else if (INFILE(_LT_gnu_javamail_exception_1) || INFILE(_LT_gnu_javamail_exception_2)) {
14368  INTERESTING("gnu-javamail-exception");
14369  }
14370  else if (INFILE(_LT_i2p_gpl_java_exception)) {
14371  INTERESTING("i2p-gpl-java-exception");
14372  }
14373  else if (INFILE(_LT_GPL_EXCEPT_1) || INFILE(_LT_GPL_EXCEPT_2)) {
14374  if (HASTEXT(_LT_Libtool_exception, 0)) {
14375  INTERESTING("Libtool-exception");
14376  }
14377  if (HASTEXT(_LT_Autoconf_exception_2, REG_EXTENDED) || INFILE(_LT_Autoconf_exception_1)) {
14378  INTERESTING("Autoconf-exception");
14379  }
14380  }
14381  else if (INFILE(_LT_Linux_syscall_note)) {
14382  INTERESTING("Linux-syscall-note");
14383  }
14384  else if (HASTEXT(_LT_LLVM_exception_1, 0) || HASTEXT(_LT_LLVM_exception_2, 0)) {
14385  INTERESTING("LLVM-exception");
14386  }
14387  else if (INFILE(_LT_LZMA_exception)) {
14388  INTERESTING("LZMA-exception");
14389  }
14390  else if (INFILE(_LT_mif_exception)) {
14391  INTERESTING("mif-exception");
14392  }
14393  else if (HASTEXT(_LT_OCCT_exception_10_1, REG_EXTENDED) || INFILE(_LT_OCCT_exception_10_2)) {
14394  INTERESTING("OCCT-exception-1.0");
14395  }
14396  else if (INFILE(_LT_openvpn_openssl_exception)) {
14397  INTERESTING("openvpn-openssl-exception");
14398  }
14399  else if (HASTEXT(_TITLE_QT_GPL_EXCEPTION_10, 0)) {
14400  INTERESTING("Qt-GPL-exception-1.0");
14401  }
14402  else if (HASTEXT(_LT_QT_GPL_EXCEPTION_10_1, 0) && INFILE(_LT_QT_GPL_EXCEPTION_10_2)) {
14403  INTERESTING("Qt-GPL-exception-1.0");
14404  }
14405  else if (HASTEXT(_LT_QT_GPL_EXCEPTION, 0) && HASTEXT(_LT_QT_GPL_EXCEPTION_10_3, 0)) {
14406  INTERESTING("Qt-GPL-exception-1.0");
14407  }
14408  else if (INFILE(_TITLE_Nokia_Qt_LGPL_exception_11)) {
14409  INTERESTING("Nokia-Qt-exception-1.1");
14410  }
14411  else if (INFILE(_TITLE_QT_LGPL_EXCEPTION_11)) {
14412  INTERESTING("Qt-LGPL-exception-1.1");
14413  }
14414  else if (INFILE(_LT_Qwt_exception_10_1)) {
14415  INTERESTING("Qwt-exception-1.0");
14416  }
14417  else if (HASTEXT(_LT_Qwt_exception_10_2, 0)) {
14418  INTERESTING("Qwt-exception-1.0");
14419  }
14420  else if (INFILE(_LT_WxWindows_exception_31)) {
14421  INTERESTING("WxWindows-exception-3.1");
14422  }
14423  /*
14424  * Full license text includes reference to LGPL-2.0-only
14425  * exception clause.
14426  */
14427  else if (INFILE(_PHR_WXWINDOWS_31)) {
14428  INTERESTING("WxWindows-exception-3.1");
14429  INTERESTING("LGPL-2.0-or-later");
14430  }
14431  /*
14432  * This is a vague reference to WxWindows license without
14433  * an exception reference.
14434  */
14435  else if (INFILE(_PHR_WXWINDOWS)) {
14436  INTERESTING("WxWindows");
14437  }
14438  else if (HASTEXT(_LT_u_boot_exception_20, REG_EXTENDED)) {
14439  INTERESTING("u-boot-exception-2.0");
14440  }
14441  else if (HASTEXT(_LT_GPL_EXCEPT_Trolltech, REG_EXTENDED)) {
14442  INTERESTING("trolltech-exception");
14443  }
14444  else if (INFILE(_LT_OpenSSL_exception_1) || INFILE(_LT_OpenSSL_exception_2)) {
14445  INTERESTING("OpenSSL-exception");
14446  }
14447  else if (INFILE(_LT_GPL_UPX_EXCEPT) && !HASTEXT(_LT_IGNORE_CLAUSE, REG_EXTENDED)) {
14448  INTERESTING("UPX-exception");
14449  }
14450  else if (INFILE(_URL_mysql_floss_exception) || HASTEXT(_TITLE_mysql_floss_exception, 0)) {
14451  INTERESTING(lDebug ? "mysql-floss-exception(URL)" : "mysql-floss-exception");
14452  }
14453  else if (INFILE(_TITLE_Oracle_foss_exception) || INFILE(_LT_Oracle_foss_exception)) {
14454  INTERESTING("Oracle-foss-exception");
14455  }
14456  else if (INFILE(_LT_linking_exception_2) || (INFILE(_LT_linking_exception_3) && INFILE(_LT_GPL_EXCEPT_7))) {
14457  INTERESTING("linking-exception");
14458  }
14459  else if (HASTEXT(_TITLE_universal_foss_exception_10, 0)
14460  || URL_INFILE(_URL_universal_foss_exception_10)
14461  || INFILE(_LT_universal_foss_exception_10)) {
14462  INTERESTING("universal-foss-exception-1.0");
14463  }
14464  else if (INFILE(_LT_GPL_EXCEPT_1)) {
14465  INTERESTING(lDebug ? "GPL-except-1" : "GPL-exception");
14466  }
14467  else if (INFILE(_LT_GPL_EXCEPT_2)) {
14468  INTERESTING(lDebug ? "GPL-except-2" : "GPL-exception");
14469  }
14470  else if (INFILE(_LT_GPL_EXCEPT_3)) {
14471  INTERESTING(lDebug ? "GPL-except-3" : "GPL-exception");
14472  }
14473  else if (INFILE(_LT_GPL_EXCEPT_4)) {
14474  INTERESTING(lDebug ? "GPL-except-4" : "GPL-exception");
14475  }
14476  else if (INFILE(_LT_GPL_EXCEPT_7)) {
14477  INTERESTING("linking-exception");
14478  }
14479  else if (INFILE(_LT_GPL_SWI_PROLOG_EXCEPT)) {
14480  INTERESTING(lDebug ? "GPL-swi-prolog" : "GPL-exception");
14481  }
14482 
14483  return;
14484 }
14485 
14486 #ifdef LTSR_DEBUG
14487 #define LT_TARGET 1299 /* set to -1 OR the string# to track */
14488 void showLTCache(char *msg)
14489 {
14490  int i = 0;
14491  int nCached = 0;
14492  int nMatch = 0;
14493 
14494  printf("%s\n", msg);
14495  if (LT_TARGET >= 0) {
14496  printf("... tracking string #%d\n", LT_TARGET);
14497  }
14498  while (i < NFOOTPRINTS) {
14499  if (ltsr[i] < LTSR_SMASK) {
14500  printf(i == LT_TARGET ? "x" : ".");
14501  } else if (ltsr[i] == LTSR_YES) {
14502  printf("%%");
14503  nMatch++;
14504  nCached++;
14505  } else {
14506  printf(i == LT_TARGET ? "0" : ":");
14507  nCached++;
14508  }
14509  if ((++i % 75) == 0) {
14510  printf("|%04d\n", i);
14511  }
14512  }
14513  printf("\nLTSR-matches: %d, Cached: %d\n", nMatch, nCached);
14514  return;
14515 }
14516 #endif /* LTSR_DEBUG */
14517 
14518 #ifdef DOCTOR_DEBUG
14519 /*
14520  Debugging
14521  */
14522 void dumpMatch(char *text, char *label)
14523 {
14524  char *x = text + cur.regm.rm_so;
14525  char *cp = text + cur.regm.rm_eo;
14526 
14527  if (label) {
14528  printf("%s ", label);
14529  }
14530  printf("@ %d [", cur.regm.rm_so);
14531  for (; x < cp; x++) {
14532  if (!isEOL(*x)) {
14533  printf("%c", *x);
14534  }
14535  }
14536  printf("]\n");
14537 
14538  return;
14539 }
14540 
14541 #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:991
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:631
char * copyString(char *s, char *label)
Create a copy of a string.
Definition: util.c:594
void Assert(int fatalFlag, const char *fmt,...)
Raise an assert.
Definition: util.c:1408
char * findEol(char *s)
Find first ROL in a string.
Definition: util.c:379
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:538
#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:567
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:1018
FUNCTION void addLicence(GArray *theMatches, char *licenceName)
Add a license to the matches array.
Definition: nomos_utils.c:1003
#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:10041
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:12128
char * pythonVersion(char *, int, int, int)
Check for python versions.
Definition: parse.c:10392
char * gfdlVersion(char *, int, int, int)
Check for GFDL versions.
Definition: parse.c:10751
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:12797
#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:11105
#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:11305
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:10014
static char * gplVersion(char *, int, int, int)
Check for GPL versions.
Definition: parse.c:10926
char * lpplVersion(char *, int, int, int)
Check for LPPL versions.
Definition: parse.c:10567
#define HASTEXT(x, fl)
Calls idxGrep_recordIndex()
Definition: parse.c:201
char * oslVersion(char *, int, int, int)
Check for OSL versions.
Definition: parse.c:10487
void checkFileReferences(char *, int, int, int, int, int)
Generic license-phrases referring to other files or running commands.
Definition: parse.c:12463
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:12076
#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:12316
void locateRegex(char *, item_t *, int, int, int, int)
Locate a regex in a given file.
Definition: parse.c:11795
#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:10527
int famOPENLDAP(char *, int, int, int)
Utility function to search for OpenLDAP licenses. So many different footprints are used by OpenLDAP,...
Definition: parse.c:12214
char * lgplVersion(char *, int, int, int)
Check for LGPL versions.
Definition: parse.c:10817
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:10447
void spdxReference(char *, int, int, int)
Definition: parse.c:13084
void copyleftExceptions(char *, int, int, int)
Definition: parse.c:14197
char * ccVersion(char *, int, int, int)
Check for CC_BY-X versions.
Definition: parse.c:11136
char * agplVersion(char *, int, int, int)
Check for AGPL versions.
Definition: parse.c:10673
char * mplNplVersion(char *, int, int, int)
Check for MPL|NPL versions.
Definition: parse.c:10225
#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:10342
#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